主要是分析Android中的SurfaceView和TextureView的机制,了解它们的相同点和不同点,以方便在以后的开发中更加合理的选择应用App的开发控件
一、SurfaceView分析
1、SurfaceView继承于android.view.View,因些它本质上也是一个View。
2、它与普通View不同的是,它有自己的Surface,在WMS(即WindowManagerService)中有对应的WindowState,在SurfaceFlinger中有Layer。
优点:
3、SurfaceView可以在一个独立的线程中进行绘制,不会影响到主线程。
4、SurfaceView使用的是双缓冲机制,播放视频时画面会更加流畅。
缺点:
5、由于Surface不在View hierachy中,所以它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中。
6、SurfaceView也不能嵌套使用。
二、TextureView分析
1、TextureView是在4.0(API level 14)中引入,也是继承于android.view.View,因些它本质上也是一个View。它可以将内容流直接投影到View中,所以可以用于实现Live preview等一些功能。
优点:
2、TextureView支持移动、旋转、缩放等动画,支持截图等。
缺点:
3、TextureView必须在硬件加速的窗口中使用,占用内存比SurfaceView高,在5.0以前在主线程渲染,5.0以后有单独的渲染线程。
三、分析总结
1、但是对于一些类似于2D等游戏需要不断更新画布的来说,SurfaceView会是比较好的选择。但是直播软件、视频播放器或相机应用的开发,推荐选择TextureView更加适合,这样截图、美颜功能的处理速度则更加高效。
2、Texture更像是一般的View,像TextView那样能被缩放、平移,也能加上动画。
3、TextureView只能在开启了硬件加速的Window中使用,并且消费的内存要比SurfaceView多,并伴随着1-3帧的延迟。