ART简单体验和Android图形硬件加速分析
原文链接:http://www.soomal.com/doc/10100004760.htm
Android ART简介和理论性能测试
从Android诞生起,以Java为基础的Dalvik虚拟机就一直是“原罪”,目前Dalvik采用JIT[Just In Time]的即时工作模式,每次应用运行时需要预编译成二进制机器代码,似乎安卓系统的卡顿和效率低下都是这个虚拟机的错。从Android 4.4版本开始,Google加入了新的运行环境ART。ART采用预编译模式[Ahead of Time],在应用安装时就将二进制代码编译完成。在Google的官方介绍中,ART“终有一天”会替代Dalvik成为标准的运行环境。
ART是不是真的如网上所传那么神奇,能成为Android的十全大补药丸?我们手上正好有不少能运行Android4.4的设备,并在Nexus 7上进行了体验。开启ART的方法很简单,在开发者选项中切换即可。切换后需要重启系统,并在启动后将所有已安装的应用全部重新进行预编译,应用占用的存储空间会相对增加。切换为ART后系统性能是否有提升?我们使用3DMark、GeekBench3和Antutu4对理论性能进行对比测试。
很显然,所有理论性能,包括IO和内存在内,ART和Dalvik并没有明显差异,基本可视为测试误差。那ART究竟带来了什么好处?“亲儿子”Nexus系列手机和平板电脑系统优化本身就做得相对出色,例如配置了1.2GHz双核OMAP4430处理器的Galaxy Nexus系统依然比今天许多高配置手机要流畅。至于所谓的低硬件配置优化,就更难找到可靠的实践依据和数据支持。切换ART后,确实存在少部分应用无法正常启动的情况,网页浏览和部分应用响应速度略有提升,但会出现画面碎裂的现象,基本上不影响正常使用。
寻找Android系统效率低下的原因
要了解Android的不流畅问题,不能光看表面,首先还是要找到问题的根本原因。Android的系统核心Linux本身就是一个标准的多用户多进程系统。Google并没有系统底层进行根本性改变,后台运行的进程和服务并不受限制,这也是Android手机应用在后台进程推送频繁和垃圾软件众多的原因。但是,多任务对于操作系统并不是什么缺点更不是落后反动,只要管理得当就是一个巨大优势,至少Android手机平板可以一边迅雷BT下载一边聊QQ,iOS和WP现在就没辙。而且以目前的硬件发展速度,无论是移动处理器还是配套的内存和存储芯片都将是性能越来越好,功耗发热越来越低,这算不上瓶颈。
Android相比Linux,在图形层面上有了巨大差异,GNU Linux以开源的Xorg一类的图形管理器和Gnome/KDE等桌面管理器组成,Android要相对简单一些,有图形管理[SurfaceManager],通过HAL与硬件驱动交流。但Android目前最大的问题,就恰好出现在图形管理层上。众所周知,Windows系统的图片、网页等2D图形绘制长期以来由GDI负责,从Windows 8开始转为Driect 2D加速显示[注:还有相当一部分使用DirectCompute让GPU完成通用计算,vista 起就有GPU加速,但当时并不完美,到8算是大功告成],相当于苹果iOS的Quartz 2D,而Android采用了谷歌收购的Skia。Driect 2D和Quartz 2D均对GPU硬件加速有着良好支持,但Skia原始版本的图形光栅处理却是完全基于CPU和软件运算,这意味着相对WP和iOS系统,Android的2D图形对GPU单元的利用率会严重不足。
上图是Google官方网站对Android 2D硬件加速支持的列表,即使不需要看懂英文和代码也能看到满屏幕的红叉了。虽然API等级越高,GPU硬件加速相对越完善,但API Level 18需要Android4.3以上版本支持,相信没有几个主流应用敢推出一个仅支持Android 4.3的版本。Android系统界面和原生应用完全可以不考虑向下兼容性采用高版本API因此流畅,而第三方APP却还在卡顿。
很多人会表示很奇怪:2D也需要硬件加速,GPU加速不是大型3D游戏的专利?大家可以感受一下卸载显卡驱动后完全靠处理器运算浏览网页和看视频的效果……当然这绝对不是说Android完全没有硬件图形加速,因为还可采用OpenGL的3D渲染手段,也可在处理器CPU单元中加入图形运算和视频的优化,一个纯CPU和软件运算的图形系统,光界面和视频就能把人逼疯,Android显然还没差到那个程度。
但普通应用开发者并不会去过多考虑其中的问题,常规的应用,特别是基于Webkit的各类网络应用QQ、微博等,完全依靠Skia处理。过去对Skia的测试也表明强制启用Skia的GPU加速会反而带来性能的严重下降。《Skia GPU加速能使Android系统的Webkit渲染获得多少收益? 》[作者: Huang_Dongsung农步祥 ] 很显然,Skia才是现在Android手机平板“卡顿”的罪魁祸首。
总结
所谓ART比Dalvik更快、更流畅、更省电在实际应用中没有体现,Google的介绍中完全没有谈及ART存在这类优势,无论是AOT或JIT模式从技术角度上看就各有优劣,这部分内容涉及专业的软件开发就不再详细说明。ART取代Dalvik最主要的原因是什么?其实这和技术性能无太大关系,Dalvik的Java虚拟机和JIT预编译和运行模式侵犯了以Oracle为主导的Java技术专利集合[JIT模式、甚至是Java的预编译代码模式就包含在Java技术专利池],Google发展ART主要目的以回避和减少专利数量为主。目前ART对于应用体验改善十分有限,任务单线程和多线程性能暂时还无法兼顾,某些应用变快或某些程序抽风的情况都会发生,用户机型个体差异很大。而且ART并未解决Android的图形性能存在的固有缺陷,也没有解决正统多任务系统带来的耗电和系统占用,所谓更快更高更强完全只是某些媒体和个人的脑补。真正要解决Android的性能问题,就是老老实实等Google完善硬件加速能力,或尽量使用高版本API开发应用。
这并不是对着全世界唱反调或者果粉软粉的作文,只是一篇流言终结者+简单科普,我们也要看到硬件效率不是一切,Android依然是现在最受市场欢迎的操作系统,从首次支持GDI+的Windows XP到全硬件加速的Windows 8[Direct 2D],微软走了近10年,Google的进步速度还是快得多了。
ART简单体验和Android图形硬件加速分析相关推荐
- Android 4.0的图形硬件加速及绘制技巧
[51CTO独家特稿]从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GPU的View在Canvas上进行画的操作时都会使用硬件加速.在最新的Andro ...
- Android HWUI硬件加速模块浅析
原址 什么是硬件加速(What) 传统软件的UI绘制是依靠CPU来完成的,硬件加速就是将绘制任务交由GPU来执行.Android系统负责硬件加速的模块主要是HWUI,如下图所示: 为什么要硬件加速(W ...
- Chrome 23 发布,带来 DNT 和图形硬件加速
在 Do Not Track 方面,Chrome 因为默认不支持这个特性使得 Chrome 落后于其他浏览器.经过短暂的 Beta 版之后,Chrome 23 提供了 DNT 支持来保障隐私.防止一些 ...
- 微软详解Windows 8图形硬件加速 秒杀Win7
在最新的一篇博客中,微软介绍了Windows 8的硬件图形加速,除了支持更多的显卡,Windows 8实现了对所有应用程序的硬件图形加速. 为了提供更好的Windows和应用程序用户体验,微软在Win ...
- android 加速 图像处理,Android之硬件加速
所谓硬件加速,指的是把某些计算工作交给专门的硬件来做,而不是和普通的计算工作一样交给CPU 来处理.这样不仅减轻了 CPU 的压力,而且由于有了「专人」的处理,这份计算工作的速度也被加快了.这就是「硬 ...
- Android基础 硬件加速和软件绘制 invalidate和RequestLayout流程
前言 本文介绍了硬件加速和软件绘制的区别: 并梳理了最简单的情况,在子View(非ViewGroup)调用invalidate的流程,且忽略绘图缓存,即mLayerType == LAYER_TYPE ...
- Android 模拟器硬件加速
转载自: https://software.intel.com/en-us/blogs/2012/03/12/how-to-start-intel-hardware-assisted-virtuali ...
- 关于android 手机硬件加速问题
关于安卓手机的硬件加速问题 分类: Android基础 2012-04-12 14:44 740人阅读 评论(0) 收藏 举报 最近听同事讨论硬件加速问题,完全不懂.于是乎,百度了下,原来从 ...
- android view硬件加速,Android TextureView和硬件加速
我正在尝试实现 this page上显示的示例.我已经尝试了运行android 4及更高版本的三个不同设备,并且在所有情况下,我都会看到带有此警告的黑屏: 01-27 20:01:22.683: W/ ...
最新文章
- Linux文件名命名规范
- opencv----(1) mat最好用,和IplImage,cvmat 比较
- Intel:Larrabee浮点运算能力2TFlops
- OpenGL:freeglut ERROR: Function <glutCreateWindow> called without first calling ‘glutInit‘.
- 表情可字怎么打_小辫子表情怎么打?两根毛表情符号复制
- 华中科技大学2005年计算机组成原理试题,华中科技大学2005年计算机组成原理试题...
- flash制作文字笔顺_用FLASH制作汉字笔顺动画
- 如何根据光学中像差(相位)求出其点扩散函数
- 1075:字符串统计
- linux 下安装openoffice服务 百度文库在线预览 doc转pdf、pdf转swf格式
- 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
- BPMN,BPEL,XPDL
- 姆吉拉假面 时间不够怎么办_丰田如何指导我们基础设施的发展(并使我赞赏吉拉)...
- 项目八学好英语网html,学好英语的八种方法-英语文章阅读-大耳朵英语 - 免费在线英语学习 口语练习 四级听力资料 在线翻译 网络课堂 英语社区...
- C# 匿名方法和拉姆达表达式
- ES8都有哪些新特性,你还在用ES6吗?
- 开始连载长篇小说《星辰傀儡线》
- Steam Apex Legends 最简单领取方法,不需要改地区
- pjsip 屏幕直播
- 基于C的PCM音频数据的读取、处理与写入(一)
热门文章
- ipad服务器已停止响应怎么办,如果iPad无法打开或者显示屏幕停止响应怎么办?要注意哪些方面...
- “写代码的时候,不能对自己「妥协」” | 技术人金句系列
- ubuntu绑定usb设备以及摄像头端口地址(编号)
- 如何裁剪动图像素?gif裁剪尺寸的方法
- 计算机网络 实验二 网络实用工具、命令使用
- JAX-RS 2.0 REST 客户端
- easypoi导出隔行样式设置
- 微信公众号实现路径规划和导航功能
- 【Java】人事管理系统
- 【操作系统⑫】——存储管理(下)【分段存储管理 虚拟存储管理 段页式存储管理方案 页面置换算法 OPT FIFO LRU】