Android 4.4 ART :被忽略的重大预示

互联网 | 编辑: 潘翔城 2013-12-06 06:30:00转载

也许人们在得知Google新发布的Android系统版本名称为4.4时都不以为然,认为这个升级十分微不足道,只有0.1而已。就是安卓官方,对待此次升级也是颇为低调。

可是如果了解了4.4所暗示的变化时,所有Android开发者和其他利益相关者都必须打起十二分精神对看待4.4了。因为这次升级可能是Android在用户体验上大进步的前奏。还有那些总是嘲笑Android机器运行缓慢的iOS开发者和其用户也同样需要重新审视自己的行为了。因为这种嘲笑在不久的将来可能会失去其根基。不仅仅是直观体验上的,更是底层技术上的。

首先说一下,我也是一个Android开发者,目前还在美国上学,所以能够接触到一些一手资料,在国内搜了搜,几乎没有什么相关文章,所以在这里跟大家进行分享一下我的“发现”。

当官方发布4.4时,我简单浏览了一下Google+上官方账户发布的对该系统的简介,觉得值得关注的只有两点1.对内存的需求降低了,2.支持更多的sensor。综合起来,就是为可穿戴设备开路。确实没有什么亮点可言,顺应了大的发展方向而已。随后我预定了Nexus 5,图个性价比。到手试用后第一感觉是“物美价廉”,对系统本身没有太大的感觉。

后来为了进行开发测试,我打开了“开发者模式”,其中有一个选项引起了我的注意,叫“选择运行时环境”。可选项有Dalvik和ART,默认是Dalvik,即Android一直以来使用的运行方式。这是之前版本都没有的选项。为了弄明白这到底是个什么东西,我试着在Google上搜了一下,这一搜不要紧,直接改变了我对4.4版本存在意义的看法。仅仅因为这一个变化,4.4完全可以看做是5.0的前奏,或者说是试水版本。而且预示着5.0版可能会带来重大改变,一个可以让苹果面临变成下一个诺基亚、黑莓风险的改变。当然,我这话说的有点过,但是这个改变的重要性真的怎么说都不为过。

下面我就详细介绍一下这个变化到底是什么,这些内容可能对没有编程背景的人无法马上理解,但是我会尽量说的通俗一点。简单地说,就是Android程序运行的根本机制改变了,程序会启动地更快,而且会更省资源。表现在用户体验上,就是Android更流畅了,同时续航能力显著增加。而且这种变化不是小打小闹,而是非常可观的!根据AndroidPolicy上专项文章(http://www.Androidpolice.com/2013/11/06/meet-art-part-1-the-new-super-fast-Android-runtime-google-has-been-working-on-in-secret-for-over-2-years-debuts-in-kitkat/)的说法,这个改变可以让部分Android程序的启动加速50%,理论上待机时间也会显著增加。根据该文后一些“小白鼠”们的评论,他们在试用了ART运行模式后都体会到了其带来的速度提升和续航提升,而且效果非常明显。这说明这个尚处在实验阶段的ART模式已经能够带来明显的好处,唯一不足的是,作为beta版,稳定性欠佳。

如果你想知道其原理是什么,请接着往下看,我会解释的很“大众化”。Android是基于Java语言的,iOS是基于Obejctive-C的。很专业是吗?不要紧,你不需要懂它们有什么区别、孰优孰劣。看懂下面的就行!前者,即Java的代码实际上需要两次“转换”才能最终以用户可看的程序跑起来,一次发生在开发者发布安装包前,使用开发者自己机器的CPU,另一次在用户启动APP前,使用手机的CPU。而后者,即Objective-C的代码只需要一次这种“转换”---在开发者发布安装包前,所以只占用开发者机器的CPU时间。如果我们假设同样代码量的程序需要同样多的CPU时间进行从代码到最终能跑的“转换”。那么把这种工作全部放在了开发者的机器上进行的iOS显然就更具优势,因为用户在打开APP之前不需要再浪费时间进行“转换”,这部分时间由开发者“忍受”了。而安卓程序启动相对较慢就是因为第二次“转化”需要在打开程序时进行引起的。这两种机制是历史的产物,总体上不能说谁好谁坏,只有适用范围的问题。考虑到手机属于体验要求比较高的设备,显然iOS这种机制更合适。但是在企业环境下,两次“转换”式的解决方案有很多其他的优势,这里就没必要展开说了,因为与话题无关。所以这两种机制带来的后果就是,iOS总是比Android快,而且是天生的!

现在ART的出现代表了什么?代表了Android在启动程序时将像iOS一样,无须进行第二次“转换”工作了。ART把第二次“转换”所要使用的时间放在“程序安装时”进行,而不再是“程序启动时”进行。这样做虽然安装程序时要慢一点,但是在使用时就会明显快起来。按我的浅薄理解,就是把以前每次启动程序都要做的工作改成“一次性”的工作,放在用户不那么在乎的安装时完成。这从长期来看也降低了总体的“转换”时间。试想一个程序,安装后你使用了N次。按原先Dalvik的方法(术语叫Just-in-time compilation),N次启动就需要进行N次这样的“转换”。但是按照ART的方法(术语叫Ahead-of-time compilation),不管这个程序你使用几次,都只发生一次“转换”。这也解释了为什么使用ART会降低CPU的使用频率,进而降低电量的使用。
当然,ART也会带来其他的负面影响。其一是增加程序安装所需的时间,这一点在上文中已经提到了原因,目前还不知道具体会是多少。考虑到其他技术因素,这个时长的增加可能比我为了讲解方便所举的“第二次转换”所需的时长要长一点,但是肯定不会长到无法忍受的地步。我查到的资料显示,这个变化对小程序几乎可以忽略不计,受影响的应该是以游戏为主的程序,因为他们本身代码量就更大。不过这跟你获得的收益也是成正比的,因为ART可以让你在打开游戏时省更多的时间。如果将来都是“后台安装”的话,对用户体验更是微乎其微,你去看几个新闻这时间就过去了。第二个缺点是会使安装后的文件占用更多的空间,据称是10%-20%的增长。不过不要怕,这个增长指的是对“代码”部分文件的增加。比如一个100M的游戏,可能代码只有20M,剩下80M是图片和音乐等文件。所以即便增加20%的安装所需空间,也只不过多了4M而已。跟你获得的好处相比微不足道。更何况是在单位存储空间价格极速下跌的21世纪?

最后,据我了解,ART这个项目其实在2年前就已经开始了,只不过之前一直不受关注,只有零星的报道,毕竟那时候只是个“梦想”而已。可是现在,4.4版本以“开发者预览”的形式将其呈现出来,目的就是让手机厂商、应用开发者等进行测试,从而帮助该项目进行改进。从我得到的信息来看,ART的稳定性并不差,完全可以胜任日常使用。这也是为什么我会说,4.4的ART选项可能预示着5.0系统会出现重大改变---彻底从Dalvik转换到ART。其实从实际情况分析,这样的转换也是合情合理的。Java需要虚拟机进行“二次转换”才能跑是因为要实现跨平台。可是对Android来说,从某种意义上已经是单一平台的设备了,再使用两次“转换”意义不大。为了提升运行效率,重新设计运行时方法合情合理,而且没有任何副作用。如果真的是这样的话,iOS开发人员和其用户所引以为傲的流畅体验将不再是一个值得炫耀的东西,因为这种体验将随着登陆Android平台变得“大众化”。再加上Android市场占有率的巨大优势、Google Play商店的崛起,iOS设备还能靠什么支撑自己的高价策略?Apple身上的光环已经随乔布斯的离去而开始退去,iPhone走下神坛只会是时间问题。到了那个时候,iPhone NC中的C也就只能代表Cheap了。

本人并非计算机专业出身,专业背景是商科+IT技术。因此对技术的理解可能有偏差,如文中观点有错,欢迎指正。

Android 4.4上的测试版新虚拟机ART和老的Delvik之间的实际差距有多大呢?国外有网友就发布了两个虚拟机的简单对比,发现应用启动速度互有胜负,但在应用切换方面明显就是ART更有优势。

Android 4.4拥有一个非常重要的隐藏功能,那就是正在测试当中的ART Java虚拟机,Google希望未来让它来替代老的Dalvik,让Android系统变得更流畅。

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑