1、Surface
由屏幕顯示內容合成器(screen compositor)所管理的原生緩衝器的句柄,即通過Surface可以獲得原生緩衝器以及其中的內容,可以理解爲Surface就是一個用來畫圖形圖像的地方。
Surface中有一個Canvas,專門用來畫圖。
2、SurfaceView
SurfaceView就是Surface的View,通過SurfaceView可以部分或者全部看見Surface的內容。
Surface通過SurfaceView才能展示其中的內容。
在這個層面上而言,Surface就是管理數據的地方,SurfaceView就是展示數據的地方。
3、SurfaceHolder是一個接口,其作用就像一個關於Surface的監聽器,提供訪問和控制SurfaceView 背後的Surface的相關方法。它通過三個回調方法使我們可以感知Surface的創建,銷燬和改變。在SurfaceView有一個方法getHolder,可以很方便的獲得SurfaceView所對應的Surface所對應的SurfaceHolder。
SurfaceHolder裏面的重要方法:
abstract Canvas lockCanvas():獲得一個Canvas對象,並鎖定。
abstract void unlockCanvasAndPost(Canvas canvas):當修改Surface中的數據完成後,釋放同步鎖,並提交改變,然後將新的數據進行展示,同時Surface中相關數據將會丟失。
4、SurfaceHolder.Callback:裏面定義了三個接口方法:
abstract void surfaceChanged(SurfaceHolder holder, int format, int width, int height):當surface發生任何結構性的變化時(格式或者大小),該方法就會被立即調用。
abstract void surfaceCreated(SurfaceHolder holder):當surface對象創建後,該方法就會被立即調用。
abstract void surfaceDestroyed(SurfaceHolder holder):當surface對象在將要銷燬前,該方法會被立即調用。
具體解釋可以參見:http://blog.csdn.net/pathuang68/article/details/7351317 和
http://www.linuxidc.com/Linux/2012-08/67619.htm兩篇文章。同時感謝兩位博主。