SurfaceView和TextureView均继承于android.view.View
与其它View不同的是,两者都能在独立的线程中绘制和渲染,在专用的GPU线程中大大提高渲染的性能。
一、SurfaceView专门提供了嵌入视图层级的绘制界面,开发者可以控制该界面像Size等的形式,能保证界面在屏幕上的正确位置。
但也有局限:
由于是独立的一层View,更像是独立的一个Window,不能加上动画、平移、缩放;
两个SurfaceView不能相互覆盖。
二、TextureView更像是一般的View,像TextView那样能被缩放、平移,也能加上动画。
TextureView只能在开启了硬件加速的Window中使用,并且消费的内存要比SurfaceView多,并伴随着1-3帧的延迟。
三、TextureView和SurfaceView都是继承自View类的,但是TextureView在Andriod4.0之后的API中才能使用。
SurfaceView可以通过SurfaceHolder.addCallback方法在子线程中更新UI,TextureView则可以通过TextureView.setSurfaceTextureListener在子线程中更新UI,个人认为能够在子线程中更新UI是上述两种View相比于View的最大优势。
但是,两者更新画面的方式也有些不同,由于SurfaceView的双缓冲功能,可以是画面更加流畅的运行,但是由于其holder的存在导致画面更新会存在间隔(不太好表达,直接上图)。并且,由于holder的存在,SurfaceView也不能进行像View一样的setAlpha和setRotation方法,但是对于一些类似于坦克大战等需要不断告诉更新画布的游戏来说,SurfaceView绝对是极好的选择。但是比如视频播放器或相机应用的开发,TextureView则更加适合。
您可能感兴趣的文章:Android中使用TextureView播放视频Android截屏SurfaceView黑屏问题的解决办法Android切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题的解决方法Android基于OpenGL的GLSurfaceView创建一个Activity实现方法Android SurfaceView运行机制剖析--处理切换到后台再重新进入程序时的异常Android App中使用SurfaceView制作多线程动画的实例讲解