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

jopen 10年前

也许人们在得知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系统变得更流畅。这一个新的虚拟机在业内受到广泛关注,那么新虚拟机 的表现又如何呢?近日国外有网友在Reddit上传了两个视频,为大家带来了不同虚拟机在启动和切换应用的简单对比。

用于对比的是两台从系统(ASOP Android 4.4 ROM)到安装的应用都相同的2013版Nexus 7,而运行环境则分别是ART和Dalvik。