看了网上的资料,总结如下:
一、surface
由屏幕显示内容合成器(screen compositor)所管理的 原生缓冲器的句柄。
就是一个句柄,即它是一个抽象的东东,就是一个操作接口。
由Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的:
三个重要的类:View、Canvas、Paint
通过画笔可以在画布上画出各种图形,然后通过视图将画布内容展示在屏幕上。
二、SurfaceView 与 Surface的关系图示
三、SurfaceHolder
SurfaceHolder还提供了很多重要的方法(成员函数),其中最重要的就是:
1. abstract void addCallback(SurfaceHolder.Callbackcallback)
为SurfaceHolder添加一个SurfaceHolder.Callback回调接口。
2. abstract Canvas lockCanvas()
获取一个Canvas对象,并锁定之。所得到的Canvas对象,其实就是Surface中一个成员。
abstract Canvas lockCanvas(Rectdirty) 同上。但只锁定dirty所指定的矩形区域,因此效率更高。
同步锁机制的目的,就是为了在绘制的过程中,Surface中的数据不会被改变。
3. abstract void unlockCanvasAndPost(Canvascanvas)
当修改Surface中的数据完成后,释放同步锁,并提交改变,然后将新的数据进行展示,同时Surface中相关数据会被丢失。
四、三者之间的关系总结:
从设计模式的高度来看,Surface、SurfaceView和SurfaceHolder实质上就是广为人知的MVC,即Model-View-Controller。Model就是模型的意思,或者说是数据模型,或者更简单地说就是数据,也就是这里的Surface;View即视图,代表用户交互界面,也就是这里的SurfaceView;SurfaceHolder很明显可以理解为MVC中的Controller(控制器)。这样看起来三者之间的关系就清楚了很多。
五、Callback 作用:
前面已经讲到SurfaceHolder是一个接口(控制器),它通过回调方法的方式,来 让我们可以感知到Surface的创建、销毁或者改变。
1. abstract void surfaceChanged(SurfaceHolderholder, int format, int width, int height)
当surface发生任何结构性的变化时(格式或者大小),该方法就会被立即调用。
2. abstract void surfaceCreated(SurfaceHolderholder)
当surface对象创建后,该方法就会被立即调用。
3. abstract void surfaceDestroyed(SurfaceHolderholder)
当surface对象在将要销毁前,该方法会被立即调用。
关于SurfaceView, 这个类的目的之一,就是提供一个可以用另外一个线程(第二个线程)进行屏幕渲染的surface。译注:即UI线程和绘制线程可以分离。
转载请注明出处:http://blog.csdn.net/pathuang68/article/details/7351317