SurfaceView及TextureView对比

SurfaceView 与 TextureView 详解 播放视频或者渲染其他的动画的时候,有两个 View 组件可供选择,SurfaceView 和 TextureView。在 Android 7.0 上系统 Surfaceview 的性能比 TextureView 更有优势,支持对象的内容位置和包含的应用内容同步更新,平移、缩放不会产生黑边。 在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView。 阅读详情
AI摘要

SurfaceView是Android中用于高性能显示的组件,适合视频播放和游戏,它在单独线程中绘制,不影响主线程。TextureView则在4.0后引入,支持视图变换如旋转、缩放,适合需要动画效果的场景。两者性能对比,SurfaceView在7.0以上系统更具优势,因为它能更好地同步内容和避免延迟。然而,TextureView需要在硬件加速窗口中使用,内存占用较高。播放器通常优先选择SurfaceView,因为它更稳定且资源效率更高。

SurfaceView是什么 ?

SurfaceView优点及缺点?

SurfaceView中双缓冲?

TextureView是什么?

TextureView优点及缺点?

两者的性能相比如何?

播放器应该选择谁?

SurfaceView是什么?

它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface。有自己的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer。我们知道,一般的Activity包含的多个View会组成View hierachy的树形结构,只有最顶层的DecorView,也就是根结点视图,才是对WMS可见的。这个DecorView在WMS中有一个对应的WindowState。相应地,在SF中对应的Layer。而SurfaceView自带一个Surface,这个Surface在WMS中有自己对应的WindowState,在SF中也会有自己的Layer。虽然在App端它仍在View hierachy中,但在Server端(WMS和SF)中,它与宿主窗口是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染时可以有自己的GL context。这对于一些游戏、视频等性能相关的应用非常有益,因为它不会影响主线程对事件的响应。但它也有缺点,因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中,一些View中的特性也无法使用。

 

SurfaceView优点及缺点

优点:可以在一个独立的线程中进行绘制,不会影响主线程

      使用双缓冲机制,播放视频时画面更流畅

缺点:Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中。SurfaceView 不能嵌套使用

SurfaceView中双缓冲

双缓冲:在运用时可以理解为:SurfaceView在更新视图时用到了两张Canvas,一张frontCanvas和一张backCanvas,每次实际显示的是frontCanvas,backCanvas存储的是上一次更改前的视图,当使用lockCanvas()获取画布时,得到的实际上是backCanvas而不是正在显示的frontCanvas,之后你在获取到的backCanvas上绘制新视图,再unlockCanvasAndPost(canvas)此视图,那么上传的这张canvas将替换原来的frontCanvas作为新的frontCanvas,原来的frontCanvas将切换到后台作为backCanvas。例如,如果你已经先后两次绘制了视图A和B,那么你再调用lockCanvas()获取视图,获得的将是A而不是正在显示的B,之后你讲重绘的C视图上传,那么C将取代B作为新的frontCanvas显示在SurfaceView上,原来的B则转换为backCanvas。

TextureView是什么

在4.0(API level 14)中引入,与SurfaceView一样继承View, 它可以将内容流直接投影到View中,它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。值得注意的是TextureView必须在硬件加速的窗口中。它显示的内容流数据可以来自App进程或是远端进程。从类图中可以看到,TextureView继承自View,它与其它的View一样在View hierachy中管理与绘制。TextureView重载了draw()方法,其中主要SurfaceTexture中收到的图像数据作为纹理更新到对应的HardwareLayer中。SurfaceTexture.OnFrameAvailableListener用于通知TextureView内容流有新图像到来。SurfaceTextureListener接口用于让TextureView的使用者知道SurfaceTexture已准备好,这样就可以把SurfaceTexture交给相应的内容源。Surface为BufferQueue的Producer接口实现类,使生产者可以通过它的软件或硬件渲染接口为SurfaceTexture内部的BufferQueue提供graphic buffer。

TextureView优点及缺点

优点:支持移动、旋转、缩放等动画,支持截图

缺点:必须在硬件加速的窗口中使用,占用内存比SurfaceView高,在5.0以前在主线程渲染,5.0以后有单独的渲染线程。

谁的性能更优?

 

播放器应该选择谁?

从性能和安全性角度出发,使用播放器优先选SurfaceView。

1、在android 7.0上系统surfaceview的性能比TextureView更有优势,支持对象的内容位置和包含的应用内容同步更新,平移、缩放不会产生黑边。 在7.0以下系统如果使用场景有动画效果,可以选择性使用TextureView

2、由于失效(invalidation)和缓冲的特性,TextureView增加了额外1~3帧的延迟显示画面更新

3、TextureView总是使用GL合成,而SurfaceView可以使用硬件overlay后端,可以占用更少的内存带宽,消耗更少的能量

4、TextureView的内部缓冲队列导致比SurfaceView使用更多的内存

5、SurfaceView: 内部自己持有surface,surface 创建、销毁、大小改变时系统来处理的,通过surfaceHolder 的callback回调通知。当画布创建好时,可以将surface绑定到MediaPlayer中。SurfaceView如果为用户可见的时候,创建SurfaceView的SurfaceHolder用于显示视频流解析的帧图片,如果发现SurfaceView变为用户不可见的时候,则立即销毁SurfaceView的SurfaceHolder,以达到节约系统资源的目的



作者:private_object
链接:https://www.jianshu.com/p/d9ccd6d3abb2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

反思:Google 为何把 SurfaceView 设计的这么难用? 的绘图表面所使用的图形缓冲区是完全由摄像头服务或者视频播放服务来提供的,因此,我们就不可以随意地去访问该图形缓冲区,而是要由摄像头服务或者视频播放服务来访问,因为该图形缓冲区有可能是在专门的硬件里面分配的。但在实际开发中,随着业务场景复杂度的上升,仍然有部分场景是无法被满足的,比如:在页面的最上方播放一条全屏的视频广告。相关的操作,放在不同的线程中执行,而多线程对这一块内存区域的读写,势必会引发内部状态的混乱。的设计中,设计者还考虑到了音视频渲染时,字幕相关业务的场景,因此额外提供了一个。 阅读详情

相关推荐

SurfaceView和TextureView对比

SurfaceView: 优点:可以在一个独立的线程中进行绘制,不会影响主线程           使用双缓冲机制,播放视频时画面更流畅 缺点:Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中。SurfaceView 不能嵌套使用 TextureView: 优点:支持移动、旋转、缩放等动画,...

zhangyadong_QQ的博客 4599

SurfaceView、GLSurfaceView、SurfaceTexture、TextureView 详解

SurfaceView 它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface(用来保存像素数据的保留内存区域)。 优点 它与宿主窗口是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染时可以有自己的GLContext,它不会影响主线程对事件的响应。 缺点 因为这个Surface不在View hierachy中,它的显示也不受...

ArvinFei的博客 4678

SurfaceView及TextureView对比,我把所有Android第三方库整理成了PDF

它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface。有自己的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer。我们知道,一般的Activity包含的多个View会组成View hierachy的树形结构,只有最顶层的DecorView,也就是根结点视图,才是对WMS可见的。这个DecorView在WMS中有一个对应的WindowState。相应地,在SF中对应的Layer。而SurfaceView自带一个S

m0_66264699的博客 252

安卓surfaceview的使用方式

surfaceview内部机制和外部层次结构在安卓开发中,我们经常会遇到一些需要高性能、高帧率、高画质的应用场景,例如视频播放、游戏开发、相机预览等。这些场景中,我们需要直接操作图像数据,并且实时地显示到屏幕上。view组件是在主线程中进行绘制的,如果绘制过程耗时过长或者频繁刷新,可能会导致主线程阻塞,影响用户交互和界面响应。view组件在绘制时没有使用双缓冲机制,也就是说每次绘制都是直接在屏幕上进行的,这可能会导致绘制过程中出现闪烁或者撕裂的现象。

Makenna's World 5517

Android图形渲染:SurfaceView与TextureView核心原理、性能对比与实战选型

在Android应用开发中,高性能图形渲染是构建流畅用户体验的关键技术。其核心原理在于如何将动态内容高效合成并显示到屏幕上,这通常涉及独立的渲染线程与系统显示合成器的交互。从技术价值看,高效的图形渲染能显著提升视频播放、游戏、相机预览等场景的性能与能效。在具体应用场景中,Android提供了两种主要的解决方案:SurfaceView和TextureView。SurfaceView采用独立的绘图表面,通过直接与SurfaceFlinger通信实现高效上屏,适用于对性能要求极高的全屏渲染;而TextureVie

weixin_29189377的博客 320

信号完整性入门:为什么工程师总爱用dB来描述衰减?

本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

weixin_29263201的博客 384

Android TextureView 和 SurfaceView 对比浅析

本人作为一名Android新手,最近在在开发一款有关吹画的小游戏,为了实现吹画的过渡动画以及画面更新效果,本人在TextureView和SurfaceView之间纠结了很长时间,所以写了这篇博客来和大家分享一下我的经历。     首先,TextureView和SurfaceView都是继承自View类的,但是TextureView在Andriod4.0之后的API中才能使用。SurfaceVie

lrh_12580的博客 1万+

ASP.NET Core Identity + Mysql(实战一)——注册登陆

在进行实战之前,我们先来了解一下Identity。 ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格、登录和用户数据存储。简单的来讲包括: 1.用户数据存储(使用任意你喜欢的关系型数据库,从sqllite到mysql、sqlserver等等,由Entity Framwork 支持) 2.登陆、注册外加身份认证(基于coo...

weixin_40359716的博客 1397

SurfaceView及TextureView对比,一线互联网移动架构师NDK模块开发

SurfaceView中双缓冲? TextureView是什么? TextureView优点及缺点? 两者的性能相比如何? 播放器应该选择谁? SurfaceView是什么? 它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface。有自己的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer。我们知道,一般的Activity包含的多个View会组成View hierachy的树形结构,只有最顶层的DecorView

m0_66264699的博客 413

给新考上北大软件与微电子学院的同学——利用北大资源

利用北大资源 首先,恭喜大家考入北京大学!希望软院成为各位人生旅途中快乐的一站! 说明:限于本人搜集能力有限,本文只列出本人常利用的资源(上课老师会告知的资源也不在此列),本文所述的资源只是北大可利用资源的一个子集。 一、 图书馆资源:北京大学图书馆的资源数量,我就不多废话了,这里主要说一样怎样利用这些资源。 a) 传统资源分布及查找:这种资源主要包括纸质书箱、杂志、光盘等内...

Felomeng的技术博客 1万+

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK、FSK和PSK是三种基础数字调制技术。ASK通过改变载波振幅传输信息,实现简单但抗干扰弱;FSK利用频率变化传递信号,抗干扰较强但频谱利用率一般;PSK通过相位变化编码数据,抗干扰和频谱效率最优但同步要求高。三种技术各具特点,分别适用于不同通信场景:ASK用于低速光纤通信,FSK常见于无线广播,PSK则广泛应用于Wi-Fi、蓝牙等现代通信系统。

limengshi138392的博客 8717

textureview 缩放_Android SurfaceView及TextureView对比

SurfaceView是什么?它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface。有自己的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer。我们知道,一般的Activity包含的多个View会组成View hierachy的树形结构,只有最顶层的DecorView,也就是根结点视图,才是对WMS可...

weixin_39843677的博客 572

CAN-do-paser:Java开发的CAN总线数据帧解析库

CAN总线数据帧使用DBC文件信息解析为物理量,基于Java开发的数据解析工具。

佳瑞的博客 1133

Grafika视频播放实战:TextureView vs SurfaceView性能对比终极指南

在Android视频开发领域,**Grafika** 是一个强大的开源测试应用,专门用于探索Android图形和视频处理能力。本文将通过Grafika项目深入分析TextureView与SurfaceView在视频播放中的性能差异,帮助开发者选择最适合的视频渲染方案。😊 ## 为什么选择Grafika进行视频性能测试? Grafika提供了完整的视频播放测试环境,包含了多种视频渲染场景的实现

gitblog_00047的博客 746

避坑指南:Livox Mid-360双雷达SLAM配置中,那些官方文档没说的细节(IP设置、话题分离与时间同步)

本文详细解析了Livox Mid-360双雷达SLAM配置中的关键优化点,包括IP设置、话题分离与时间同步等官方文档未提及的细节。通过实战案例和代码示例,帮助开发者解决点云错位、IMU数据混乱等问题,提升SLAM系统的稳定性和精度。特别针对网络架构设计、驱动修改和时间同步机制提供了专业指导。

weixin_29745609的博客 425

【2026 Science Robotics】Learning realistic lip motions for humanoid face robots

哥伦比亚大学Yuhang Hu团队提出了一种创新方法,通过10自由度软体嘴唇设计和自监督学习算法解决仿人机器人嘴唇动作僵硬问题。研究采用变分自编码器(VAE)和面部动作Transformer(FAT)模型,将语音信号转化为机器人可执行的电机指令。实验表明,该方法在多语言测试中表现优异,用户偏好率达62.5%,显著提升了口型同步的真实感和流畅度。该成果突破了传统机械结构的限制,为跨越"恐怖谷效应"提供了有效解决方案。

志在山顶的人,不会贪念山腰的风景 308

Android视频开发必看:SurfaceView和TextureView到底怎么选?附性能对比实测

本文深入对比了Android视频开发中SurfaceView和TextureView的核心机制与性能差异。通过实测数据,分析了二者在帧率、内存、动画支持等方面的表现,并针对全屏播放、复杂交互、相机预览等典型场景提供了明确的选型建议,帮助开发者根据项目需求做出最优决策。

ujm567890的博客 646

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Grafika视频播放实战:TextureView与SurfaceView的深度对比

想要在Android应用中实现流畅的视频播放功能?Grafika项目为你提供了完美的解决方案!🎯 作为GitHub加速计划中的重要项目,Grafika专注于Android图形和视频处理,通过TextureView与SurfaceView的深度对比,帮助你选择最适合的视频播放方案。 ## 为什么选择Grafika进行视频播放开发? Grafika是一个强大的Android图形测试应用,专门针对

gitblog_00646的博客 902

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

视频画面帧的展示控件SurfaceView及TextureView对比

视频画面帧的展示控件SurfaceView及TextureView对比 SurfaceView是什么? 它继承自类View,因此它本质上是一个View。但与普通View不同的是,它有自己的Surface。有自己的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer。我们知道,一般的Ac

sg392361615的专栏 1144

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ExoPlayer视频渲染模式切换:SurfaceView与TextureView深度对比

在Android视频开发中,你是否遇到过以下问题: - 全屏切换时画面闪烁或拉伸变形 - 列表滑动时视频播放卡顿掉帧 - 播放界面与UI控件层级冲突 - 沉浸式模式下视频区域触控失效 本文将通过**3组核心对比**、**5种典型场景分析**和**完整实现代码**,帮助你彻底掌握ExoPlayer中SurfaceView与TextureView的选型策略和切换技巧。读完本文后,你将能够: - 理解...

gitblog_00338的博客 790

SurfaceView、GLSurfaceView、SurfaceTexture、TextureView简单对比

关键字 View SurfaceView GLSurfaceView TextureView 这三个后缀都是View, 所以这三个东西都是用来显示的, 和普通的View差不多, 类似TextView等。 发展历史: SurfaceView 出现最早, 解决类似视频播放的问题(可以用单独一个线程来渲染UI)。后来发现用起来不方便, 渲染线程需要单独编写, 一大堆都可以独立成模板。 所以就出现了 GLSurfaceView, 概括一句话就是:使用了模板的 SurfaceView。 再后来发现GLS

Jason_Lee155的博客 5594

告别卡顿!ExoPlayer渲染架构深度解析:SurfaceView与TextureView全对比

你是否曾遇到视频播放时画面卡顿、耗电过快或DRM内容无法播放的问题?作为Android开发者,选择合适的渲染组件对提升用户体验至关重要。本文将深入剖析ExoPlayer的Surface渲染原理,通过对比SurfaceView与TextureView的底层实现差异,帮你在不同场景下做出最优选择。读完本文你将掌握:两种渲染组件的核心差异、性能测试数据、实战配置方案以及源码级优化技巧。 ## 渲染架构...

gitblog_01168的博客 900
上一篇: 认识ClassLoader
下一篇: 线程池ThreadPoolExecutor实现原理
augfun
博客等级 码龄10年 311粉丝 662原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值