博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
surfaceview 与 view 的区别
阅读量:6708 次
发布时间:2019-06-25

本文共 1048 字,大约阅读时间需要 3 分钟。

引用:

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

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

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

  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加速的。

转载地址:http://khnlo.baihongyu.com/

你可能感兴趣的文章
ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开
查看>>
(C语言)memcpy函数原型的实现
查看>>
Theano2.1.1-基础知识之准备工作
查看>>
FreeBSd ports 安装软件
查看>>
DevExpress.Build
查看>>
ACCESS-如何多数据库查询(跨库查询)
查看>>
iOS:转载sqlite3
查看>>
java并发编程学习:用 Semaphore (信号量)控制并发资源
查看>>
HDU 2070 Fibbonacci Number
查看>>
Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
查看>>
Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?
查看>>
好玩的注释
查看>>
一张二维码同时集成微信、支付宝支付
查看>>
【.Net Framework 体积大?】不安装.net framework 也能运行!?原理简介-2(补充)...
查看>>
Maven编译代码的相关命令
查看>>
stingray 页面布局与设计
查看>>
江南白衣整理和开发的java常用工具类
查看>>
Android.mk 文件语法详解
查看>>
android的armeabi和armeabi-v7a
查看>>
android自己定义控件系列教程-----仿新版优酷评论剧集卡片滑动控件
查看>>