surfaceview 与 view 的区别

简介: 引用:http://www.cnblogs.com/-OYK/archive/2012/03/20/2408324.html 如果你的游戏不吃CPU,用View就比较好,符合标准Android操作方式,由系统决定刷新surface的时机。

引用:http://www.cnblogs.com/-OYK/archive/2012/03/20/2408324.html

如果你的游戏不吃CPU,用View就比较好,符合标准 Android操作方式,由系统决定刷新surface的时机。

  但如果很不幸的,你做不到不让你的程序吃CPU,你就只好使用SurfaceView来强制刷新surface了,不然系统的UI进程很可能抢不过你那些吃CPU的线程。

  当然其实不止这两种方法来刷新Surface的,这两种只是纯Java应用比较常见的方法。

  SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。

  那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。

   当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步。比如你触屏了一下,你需要surfaceView中 thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。

  所以基于以上,根据游戏特点,一般分成两类。

  1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

  2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。

 

 

一般2D游戏开发使用SurfaceView足够,因为它也是google专们扩展用于2D游戏开发的画布

使用普通的游戏画布(Android中2D专用游戏画布)中进行绘制图片,然后在GLSurfaceView(Android中3D游戏专用画布)中渲染图片的对比中发现GLSurfaceView的效率高于SurfaceView的30倍;GLSurfaceView的效率主要是因为机器硬件的GPU加速,现在flash技术也有了GPU加速技术;

下面总结一下:

         一般2D游戏使用SurfaceView足够,所以不要认为什么都要使用GLSurfaceView(openGL),而且   GLSurfaceView的弊端在于适配能力差,因为很多机型中是没有GPU加速的。

相关文章
|
存储 SQL 关系型数据库
了解TiDB基础入门
了解TiDB基础入门
4690 0
|
10月前
|
Web App开发 移动开发 UED
介绍一下HTML5的新技能:多媒体支持
介绍一下HTML5的新技能:多媒体支持
349 2
|
人机交互 iOS开发
iOS音视频入门AVAudioSession
`AVAudioSession`是苹果用来管理App对音频硬件(I / O)的资源使用;比如说: - 设置APP与其他APP是否混音,或者中断、降低其他App声音 - 手机静音下,APP是否可以播放声音 - 指定音频输入或者输出设备 - 是否支持APP录制,是否可以边录制边播放 - 声音中断的优先级(电话接入中断APP音频处理)
iOS音视频入门AVAudioSession
|
消息中间件 ARouter 安全
「性能优化系列」APP启动优化理论与实践(下)
● 启动耗时监测实战:手动打点以及AspectJ方式对比; ● 启动优化实战:有向无环图启动器、IdleHandler启动器以及其他黑科技方案; ● 优化工具介绍。
530 0
|
消息中间件 固态存储 NoSQL
开源IM项目OpenIM单聊及万人群压测报告
开源IM项目OpenIM单聊及万人群压测报告
600 0
开源IM项目OpenIM单聊及万人群压测报告
|
编解码 自然语言处理 定位技术
ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer
本文解读的论文是ICCV2021中的最佳论文,在短短几个月内,google scholar上有388引用次数,github上有6.1k star。
ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer
|
云安全 弹性计算 运维
阿里云重磅发布云原生裸金属方案:裸金属+容器,解锁云计算的新方式
新一代容器服务ACK,可以将最新神龙弹性裸金属实例的强大性能发挥得淋漓尽致,具备极致性能、高效调度、全面安全的特点。
2148 0
阿里云重磅发布云原生裸金属方案:裸金属+容器,解锁云计算的新方式
|
机器人 物联网 Shell
创客的盛会:深圳Maker Faire 参加指南
Maker Faire 是美国Make 杂志社举办的全世界最大的DIY聚会。它是一个展示创意、创新与创造的舞台,一个宣扬创客(Maker)文化的庆典,也是一个适合一家人同时参加的周末嘉年华。
855 0
创客的盛会:深圳Maker Faire 参加指南
|
5G 定位技术 虚拟化
空域结构 | 带你读《5G 空口设计与实践进阶 》之二十二
在 NR 物理层中,来自上层的业务流进行信道编码后的数据,称之为码字(Code Word)。不同的码字可以区分不同的数据流,其目的是通过 MIMO 发送多路数据,实现空分复用。由于码字数量与发射天线数量不一致,需要通过层映射和预编码将码字流映射到不同的发射天线上。层映射首先按照一定的规则将码字流重新映射到多个层(新的数据流),预编码再将数据映射到不同的天线端口上,再在各个天线端口上进行资源映射,生成 OFDM 符号并发射。
空域结构 | 带你读《5G 空口设计与实践进阶 》之二十二
|
存储 弹性计算 算法
阿里云InfluxDB®高可用设计
阿里云InfluxDB®是一版免运维,稳定可靠,可弹性伸缩的在线时序数据库服务,目前围绕InfluxDB的TIG(Telegraf/InfluxDB/Grafana)生态和高可用服务版本已经商业化,可以在阿里云官网直接购买。
4505 0
阿里云InfluxDB®高可用设计