广角镜/慧说

都用上八核处理器了Android为何还是卡?

2015年07月22日 00:38   0   1267
来源:

蛙盟云按:首家智慧全媒体技术提供商-关注产品信息和企业信息透明化的平台,北京金启程科技的产品线:数字报、数字报软件、电子报软件、移动数字报APP、全媒体集群门户、portal网站群、内容管理系统、CMS系统、政府门户、教育门户等。
    xpaper数字报云:注册会员即可获得1000元代金券。我现在就要注册数字报云平台,【点击注册】



爱活网

都用上八核处理器了 Android为何还是卡?

爱活网 07-21 10:43 显示大图

【短路三分钟】都用上八核处理器了 Android为何还是卡?


有没有感觉你用的Android手机很卡?貌似手机配置都已经挺不错的了,四核、八核、≥2GB RAM这样的配置居然还会发生动画掉帧、点击某个按钮或图标出现停顿一会儿之类的情况?高通、MTK、英伟达之类的芯片制造商不是整天宣称什么制程、架构如何先进,什么一秒钟多少万多少亿次浮点运算,怎么还整天被iPhone用户嘲笑很卡很不爽?



关于Android系统存在卡顿和不流畅的问题,似乎是个千古谜案——即便到现在也还有很多Android用户坚持说他们新买的旗舰已如丝般柔滑,却真正在流畅的细微处比iOS差了一截。不过从古到今,试图解释Android卡顿的观点就有千百种,据说即便是采访Android内部开发工程师,他们也说这是个说不清道不明的问题。这次我们就从相关Android卡顿的几个主流说法谈起,尝试从相对浅显的角度来理解这一问题。


都是Dalvik VM虚拟机惹的祸?


按照普通人对虚拟机的理解,就是平常一直在用Windows操作系统,想装个Mac OS玩玩又没钱买苹果电脑咋办?——装个虚拟机。从这个角度来理解,不管是出于玩机还是开发、或考虑兼容性的问题,用过虚拟机的同学就知道,这东西的效率和原生安装方式不在一个层面,不管是从驱动、资源利用等各角度来看都是如此。



Android的系统框架上,在最底层的Linux内核之上就跑了个虚拟机,在Android 4.4之前,这个虚拟机叫Dalvik VM。绝大部分Android应用就运转在Dalvik VM虚拟机之上——很多人,甚至是程序员认为,Android系统之所以不流畅和卡顿,罪魁祸首就是此虚拟机,想想我们平常应用层面虚拟机的运行效率就知道了,再牛逼的硬件也抵不住软件这么坑啊。


早年的Android系统能有如此奇葩的框架和执行思路并不是因为Andy Rubin真的很二。Android选择这条路的原因是看中互联网上浩瀚的Java资源——Java应用可以运行在Android这种Linux内核的系统上正是拜虚拟机所赐,对于一个当时的新生系统而言,想要尽早构建起应用生态,这是个捷径——也是Android现在拥有这么多应用资源的关键所在(虽然苹果就没这么做)。


不过另有一个帮派的程序员表示,这个层面的虚拟机和我们平常自己在电脑上装的虚拟机根本不是一回事,它的执行效率并没有人们想象的不堪,实际使用中和直接调用底层基础函数也没差多少。



(NDK的也可是让Android应用不用跑在虚拟机上)


我们从谷歌后来的行动看到,情况好像没有这么简单。早在Android 2.3时期,谷歌就意识到Dalvik并非长久之计,就为Android引入了NDK——这是个真正的开发包,使用C/C++语言也可以为Android开发应用,以这种方式开发的应用不会跑在虚拟机上。彼时的程序员认为,这是Android从应用层真正开始具备与iOS相抗衡实力的开始,但这种梦想很快就被打破,一方面是让开发者放弃Java全面转向C/C++并不现实,而且后两者开发难度甚高,涉及内存操作甚至与设备驱动程序对话,对于Android这种机器种类繁多的系统而言,开发者采用NDK很不现实(类似《极品飞车》这种大型3D游戏运行代码理应采用C++,所以这类游戏针对Android手机的不同处理器甚至还有不同的版本)。


所以在Android 4.4时期,谷歌为之引入了一种新的ART虚拟机,用以替代Dalvik。ART的特点是相比Dalvik更为高效:Dalvik虚拟机在每次运行应用时会将之编译为二进制机器代码,ART的改进之一就在于在应用安装的时候就将二进制代码编译完成(所以每个应用安装所占空间会更大),这叫预编译模式,而不是等到每次运行应用才编译。



理论上听来,ART似乎的确较Dalvik效率更高些,谷歌自己说ART对比Dalvik速度平均提升幅度达到80%,不过各位已经在用Android 4.4甚至5.0的小伙伴有这种体会吗?或许今后随着Android生态以及系统自身的完善,ART可以表现出更大的优势,起码现在我们没怎么看出来它对系统流畅性体验改善有多大贡献。


另外,在系统框架层面,除了探讨虚拟机可能是拖垮Android流畅性的元凶之一这种说法,还有人也会谈到Linux这类宏内核在驱动方面的先天不足,这些或许都是阻碍Android有丝般流畅的要素,但是否还有其他原因呢?


硬件加速弱爆了


显示系统图形界面的时候,如果画图的工作都交给CPU完成,这效率是可想而知的,犹如你让一位精通数学的同学画图,多少他倒是能画,只是能不能画好很成问题。如果GPU,也就是专门的画图工作者能够协助这个过程,情况自是大不相同。虽说系统流畅性是个相当大的话题,但硬件加速是否做得好就成为其中的重要因素。



完善如上所述的这个过程,几乎是贯穿Android 2.x早期,到最新的Android 5.1,甚至此后很长一段时间内,谷歌需要努力的方向。针对系统图片、网页等2D图形绘制,Android所用的是谷歌早在2005年就收购的Skia(那时Android都还没出生,Chrome也采用Skia作为2D图形引擎)。


Skia原始版本的图形光栅处理完全基于CPU和软件运算,也就是说早期Android的2D图形绘制对GPU的利用率存在严重不足,相较iOS和Windows Phone这种在硬件加速领域有着很久积累的系统完全不是一个水平。



在Android的系统设置-调试选项中,有个“强制进行GPU渲染”选项,开启这个选项以后会发现某些应用的运行的确更流畅了,但有些则出现了更糟糕的使用体验。在Android 2.3时代,国外科技博客DorothyBrowse特别强制开启这种Skia GPU加速,尝试进行Webkit渲染(Chrome的渲染引擎)测试,结果发现相较CPU自己画图,所谓的GPU加速居然出现了反效果,可知当时的Skia GPU加速在Android平台有多么不成熟。


在Android 3.0之前,这套系统都没有真正行之有效的图形加速方案(即便从初版开始,Android就在努力融合硬件加速),Android 3.0才实现窗口相对完整的硬件加速绘制。实际上,即便是到Android 4.1,谷歌大肆宣传的黄油计划,过渡动画帧率达到60fps,通过预判和缓冲来提升效率,其GPU加速支持也并不完整。谷歌自己的官方文档中就提到,并不是所有2D图像操作的API都已经支持硬件加速。



不过总的说来,Android的GPU加速是朝着逐步完善的方向发展的,最新版相较过去已经有了很大程度的提升,从系统级应用和各类操作这些年来流畅度的明确提升就能感觉得到,即便这种提升在iOS和Windows Phone面前还是显得有些无力。可是来到第三方应用,这个问题又变得非常复杂。


第三方应用质量很悲剧


在宣称如“丝般顺滑”、甚至“赶超iOS”的Android 4.1问世以后,不说和iOS比实际如何,其系统级应用倒真的流畅了很多,可是第三方应用死性未改,该怎么卡还是怎么卡。这就是个相当复杂的问题了。


其一,在Android一步步向前的步伐中,API Level越高,GPU硬件加速也的确愈加完善,比如Android 5.1所用API Level 22。所谓的API Level,标识的是Android平台框架的API版本。这个API可以理解为Android所跑虚拟机针对应用开发而支持的功能,随着版本号的变化,这些“功能”在发生着升级或转变。对Android的系统应用而言,采用最新的API是理所当然的,流畅性也保持在最佳状态。



但对第三方应用来说,采用最新的API,就意味着对旧版本系统的抛弃。比如微信应用更新,如果很任性地用上API Level 22,那么最新版的微信将只支持Android 5.1,人类可以忍受吗?所以微信迄今为止还在采用API Level 9,微博则为API Level 14。这种API的迭代,也是苹果为何高度追求系统一致性的重要原因。想想Android系统的碎片化问题,第三方应用要变得更高效,好像是个根本无法完成的任务。


这还只是第三方应用开发的一环。其二,Android应用开发者的“随性”让Android应用的效率更加悲惨。比如说谷歌在应用开发的指导原则中提到,如果应用不够流畅,应该看看是否存在“过度渲染(OverDraw)”的问题,就是布局重叠、重复绘制。




要检查这个问题,有兴趣的同学可以一起来做这个实验。在Android系统设置的开发者选项中,选择“显示GPU过度绘制”,此时整个界面变得花花绿绿一片。这些色块所表达的是,无色透明状态为最佳,蓝色表示很好,绿色为不错,浅红色表示较差,深红色为过度绘制问题严重。类似Instagram等应用的情况似乎挺好,而某博和Facebook过度渲染的问题就很严重。这只是Android应用开发中的一个例子,如此这般罔顾开发原则的状况那是数也数不清的。在Android相对开放的应用世界中,这种情况是不会有警察去抓的,显然iOS全程把关App Store就不会这么悲剧。


其三,在天朝这样一个奇特的国度,开放的系统无疑为许多应用开发商提供了大好机会。很多应用当安装到你手机中,其行为习惯可能是你完全不知道了,而且可能实情会更令你震惊,这就是下面一个话题了。


内存居然还不够用?装越多APP手机越卡


相关Android装越多应用,手机越卡的解释非常多样,甚至包括对于固态存储原理的解释。或许这些都


转载请以链接形式注明出处:

本篇文章来源于 "xpaper报刊网|蛙盟云平台" :http://www.womtech.net/html/hssy1/index.shtml

更多技术资讯,请访问公司官网http://www.jinostart.com

xpaper数字报刊系统介绍,请访问http://www.jinostart.com/html/comp1/content/newsmedia/2016-07-22/1-40-1.shtml

Xpaper数字报报刊云&蛙盟云 版权与免责声明:

① 凡本网注明“来源:xpaper&蛙盟云”的所有作品,版权均属于xpaper软件版权归金启程科技所有,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:金启程科技&蛙盟云”。违反上述声明者,本网将追究其相关法律责任。

② 凡本网注明“来源:XXX(非xpaper&蛙盟云)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

③ 本网部分内容来自互联网,如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。

※ 联系方式:xpaper数字报报刊云&蛙盟云运营中心 Email:jinostart@126.com

下载womtech蛙盟云app客户端 关注蛙盟云微信公众号
下载womtech蛙盟云app客户端 关注蛙盟云微信公众号
©2015北京金启程科技有限公司 京ICP备15002495号-2