Erwin Huang 发表于:13年11月15日 11:00 [翻译] DOIT.com.cn
也许大家在得知 Google 新发布的 Android 系统版本名称为 4.4 时都不以为然,认为这个升级十分微不足道,只升级了 0.1 的版本号,启用了 KitKat 的新代号而已。就算是 Google 官方,对待此次升级也是颇为低调。可是如果了解了Android 4.4所暗示的变化时,我觉得所有 Android 开发者和其他利益相关者都必须打起十二分精神对看待 Android 4.4 了。
当官方发布 Android KitKat 4.4 时,我简单浏览了一下 Google+ 上官方账户发布的对该系统的简介,觉得值得关注的只有两点:1)对内存的需求降低了,2)支持更多的 Sensor。综合起来,就是为可穿戴设备开路。确实没有更多的亮点可言,只是顺应了大的发展方向而已。随后我图个性价比,预定了Nexus 5,到手试用后第一感觉是“物美价廉”,对系统本身没有太大的感觉。
后来为了进行开发测试,我打开了“开发者模式”,其中有一个选项引起了我的注意,叫“选择运行时环境”,这是之前版本都没有的选项,可选项有 Dalvik 和 ART(默认是 Dalvik),Dalvik 即 Android 一直以来使用的运行方式。为了弄明白这到底是个什么东西,我试着在 Google 上搜了一下,直接改变了我对 4.4 版本存在意义的看法。
简单地说,就是 Android 程序运行的根本机制改变了,程序会启动地更快,而且会更省资源。表现在用户体验上,就是 Android 更流畅了,同时续航能力显著增加。这种变化不是小打小闹,而是非常可观的大变化,根据AndroidPolicy上专项文章的说法,这个改变可以让部分 Android 程序的启动加速 50%,理论上待机时间也会显著增加。
根据该文后一些“小白鼠”们的评论,他们在试用了 ART 运行模式后,都体会到了其带来的速度提升和续航提升,而且效果非常明显。这说明这个尚处在实验阶段的 ART 模式已经能够带来明显的好处,唯一不足的是,作为 Beta 版,稳定性欠佳。
众所周知,Android 是基于 Java 语言的,iOS 是基于 Obejctive-C。表现在手机和应用程序运行机制上,Java 的代码实际上需要两次“转换”才能最终以用户可看的程序跑起来,一次发生在开发者发布安装包前,使用开发者自己机器的 CPU,另一次在用户启动 APP 前,使用手机的 CPU。而基于 Objective-C 的代码只需要一次这种“转换”,在开发者发布安装包前,所以只占用开发者机器的 CPU 时间。
我们假设同样代码量的程序,需要同样多的 CPU 时间,进行从代码到最终能跑的“转换”。那么把这种工作全部放在了开发者的机器上进行的 iOS 显然就更具优势,因为用户在打开 APP 之前不需要再浪费时间进行“转换”,这部分时间由开发者“忍受”了。而 Android 程序启动相对较慢就是因为第二次“转化”需要在打开程序时进行引起的。这两种机制是历史的产物,总体上不能说谁好谁坏,只有适用范围的问题。考虑到手机属于体验要求比较高的设备,显然 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 而已,在动辄 16G,32G,甚至 128G 容量的智能手机面前,影响更是微乎其微。
据我了解,ART 这个项目其实在 2 年前就已经开始了,只不过之前一直不受关注,只有零星的报道,毕竟“计划不等于现实”嘛。可是现在 Android 4.4 版本以“开发者预览”的形式将其呈现出来,目的就是让手机厂商、应用开发者等进行测试,从而帮助该项目进行改进。从我得到的信息来看,ART 的稳定性并不差,完全可以胜任日常使用。
这也是为什么我会说,Android 4.4 的 ART 选项可能预示着 Android 5.0 系统会出现重大改变——彻底从Dalvik转换到ART。如果真的是这样的话,iOS 开发人员和其用户所引以为傲的流畅体验将不再是一个值得炫耀的东西,因为这种体验将随着登陆 Android 平台变得“大众化”,再加上 Android 市场占有率的巨大优势、Google Play 商店的崛起,iOS 设备还能靠什么支撑自己的高价策略?