Android中TextureView与SurfaceView用法区别总结

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开发中,选择使用TextureViewSurfaceView主要取决于应用的具体需求,它们各有优势局限性。首先,了解两者的应用场景特点至关重要。 参考资源链接:[Android TextureViewSurfaceView区别应用场景](https://wenku.youkuaiyun.com/doc/64533e65ea0840391e778dfb?spm=1055.2569.3001.10343) SurfaceView适用于那些需要高效连续刷新的场景,比如游戏开发,因为它是一个独立的窗口层次,能够确保画面内容在屏幕上的准确位置,并且拥有较低的输入延迟。但SurfaceView也有其缺点,它不支持在UI线程之外的线程上直接进行绘制操作,且不支持视图变换如缩放旋转,这意味着动画效果无法应用于SurfaceView上。 相反,TextureView虽然也支持在独立线程中进行绘制渲染,但它的使用需要开启硬件加速。TextureView是基于OpenGL的,因此它支持动画变换,并且可以被缩放、平移,适用于视频播放或相机应用。然而,由于硬件加速的使用,TextureView的内存消耗相对较大,且在某些情况下可能会有1-3帧的延迟。 在UI更新方面,TextureView通过TextureView.setSurfaceTextureListener来在子线程中更新UI,提供了更多灵活性,而SurfaceView则通过SurfaceHolder.addCallback来更新。在GPU渲染方面,由于硬件加速的差异,TextureView在处理复杂视图变换时表现更好,而SurfaceView则更适合于需要快速连续刷新的场景。 综上所述,开发者应该根据应用的具体需求来选择TextureViewSurfaceView。如果应用场景需要快速、连续的刷新,并且不需要复杂的视图变换,SurfaceView可能是更好的选择。而如果应用场景需要支持动画复杂变换,且可以接受额外的内存消耗,TextureView会是更合适的选择。了解《Android TextureViewSurfaceView区别应用场景》这一资料,可以帮助开发者更深入地理解这两者的用法,以及如何在开发中根据需要做出恰当的选择。 参考资源链接:[Android TextureViewSurfaceView区别应用场景](https://wenku.youkuaiyun.com/doc/64533e65ea0840391e778dfb?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值