官方的定义:html
1.SurfaceView编程
SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你能够控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。
surface是纵深排序(Z-ordered)的,这代表它总在本身所在窗口的后面。surfaceview提供了一个可见区域,只有在这个可见区域内 的surface部份内容才可见,可见区域外的部分不可见。surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。这意味者 surface的内容会被它的兄弟视图遮挡,这一特性能够用来放置遮盖物(overlays)(例如,文本和按钮等控件)。注意,若是surface上面 有透明控件,那么它的每次变化都会引发框架从新计算它和顶层控件的透明效果,这会影响性能。
你能够经过SurfaceHolder接口访问这个Surface.用getHolder()方法能够获得这个接口。
surfaceview变得可见时,surface被建立;surfaceview隐藏前,surface被销毁。这样能节省资源。若是你要查看 surface被建立和销毁的时机,能够重载surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)。
surfaceview的核心在于提供了两个线程:UI线程和渲染线程。这里应注意:
1> 全部SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用,通常来讲就是应用程序主线程。渲染线程所要访问的各类变量应该做同步处理。
2> 因为surface可能被销毁,它只在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed()之间有效,因此要确保渲染线程访问的是合法有效的surface。框架
2.SurfaceHolder性能
显示一个surface的抽象接口,使你能够控制surface的大小和格式, 以及在surface上编辑像素,和监视surace的改变。这个接口一般经过SurfaceView类实现。spa
3. SurfaceHolder.Callback线程
用户能够实现此接口接收surface变化的消息。当用在一个SurfaceView 中时, 它只在SurfaceHolder.Callback.surfaceCreated()和SurfaceHolder.Callback.surfaceDestroyed()之间有效。设置Callback的方法是SurfaceHolder.addCallback.code
为何要实现Callback接口呢?由于使用SurfaceView有一个原则,全部的绘图工做必须得在Surface被建立以后才能开始(Surface---表面,这个概念在图形编程中经常被提到。基本上咱们能够吧它当作显存的一个映射,写入到Surface的内容能够被直接复制到显存从而显示出来,这使得显示速度回很是快),而在Surface被销毁以前必须结束。因此Callback中的surfaceCreated和surfaceDestroyed就成了绘图处理代码的边界。htm
当surface被建立后,系统会自动调用surfaceCreated()方法,咱们一般会在该方法中对与surface相关的资源或对象进行初始化操做。对象
1 public void surfaceCreated(SurfaceHolder holder) { 2 if (!hasSurface) { 3 hasSurface = true; 4 initCamera(holder); 5 } 6 }
当surface被销毁时,会调用surfaceDestroyed()方法:blog
1 public void surfaceDestroyed(SurfaceHolder holder) { 2 hasSurface = false; 3 }
参见:http://www.cnblogs.com/bausch/archive/2011/10/20/2219068.html