為什么Android4.4采用ART取代Dalvik非常重要?
也許人們?cè)诘弥狦oogle新發(fā)布的Android系統(tǒng)版本名稱為4.4時(shí)都不以為然,認(rèn)為這個(gè)升級(jí)十分微不足道,只升級(jí)了0.1的版本號(hào),啟用了KitKat的新代號(hào)而已。就算是Google官方,對(duì)待此次升級(jí)也是頗為低調(diào)。可是如果了解了Android 4.4所暗示的變化時(shí),我覺得所有Android開發(fā)者和其他利益相關(guān)者都必須打起十二分精神對(duì)看待Android 4.4了。
當(dāng)官方發(fā)布Android KitKat 4.4時(shí),我簡(jiǎn)單瀏覽了一下Google+上官方賬戶發(fā)布的對(duì)該系統(tǒng)的簡(jiǎn)介,覺得值得關(guān)注的只有兩點(diǎn):1)對(duì)內(nèi)存的需求降低了,2)支持更多的 Sensor。綜合起來,就是為可穿戴設(shè)備開路。確實(shí)沒有更多的亮點(diǎn)可言,只是順應(yīng)了大的發(fā)展方向而已。隨后我圖個(gè)性價(jià)比,預(yù)定了Nexus 5,到手試用后第一感覺是“物美價(jià)廉”,對(duì)系統(tǒng)本身沒有太大的感覺。
后來為了進(jìn)行開發(fā)測(cè)試,我打開了“開發(fā)者模式”,其中有一個(gè)選項(xiàng)引起了我的注意,叫“選擇運(yùn)行時(shí)環(huán)境”,這是之前版本都沒有的選項(xiàng),可選項(xiàng)有Dalvik和ART(默認(rèn)是Dalvik),Dalvik即Android一直以來使用的運(yùn)行方式。為了弄明白這到底是個(gè)什么東西,我試著在Google上搜了一下,直接改變了我對(duì)4.4版本存在意義的看法。
簡(jiǎn)單地說,就是Android程序運(yùn)行的根本機(jī)制改變了,程序會(huì)啟動(dòng)地更快,而且會(huì)更省資源。表現(xiàn)在用戶體驗(yàn)上,就是Android更流暢了,同時(shí)續(xù)航能力顯著增加。這種變化不是小打小鬧,而是非常可觀的大變化,根據(jù)AndroidPolicy上專項(xiàng)文章的說法,這個(gè)改變可以讓部分Android程序的啟動(dòng)加速50%,理論上待機(jī)時(shí)間也會(huì)顯著增加。
根據(jù)該文后一些“小白鼠”們的評(píng)論,他們?cè)谠囉昧薃RT運(yùn)行模式后,都體會(huì)到了其帶來的速度提升和續(xù)航提升,而且效果非常明顯。這說明這個(gè)尚處在實(shí)驗(yàn)階段的ART模式已經(jīng)能夠帶來明顯的好處,唯一不足的是,作為Beta版,穩(wěn)定性欠佳。
眾所周知,Android是基于Java語言的,iOS是基于Obejctive-C。表現(xiàn)在手機(jī)和應(yīng)用程序運(yùn)行機(jī)制上,Java的代碼實(shí)際上需要 兩次“轉(zhuǎn)換”才能最終以用戶可看的程序跑起來,一次發(fā)生在開發(fā)者發(fā)布安裝包前,使用開發(fā)者自己機(jī)器的CPU,另一次在用戶啟動(dòng)APP前,使用手機(jī)的 CPU。而基于Objective-C的代碼只需要一次這種“轉(zhuǎn)換”,在開發(fā)者發(fā)布安裝包前,所以只占用開發(fā)者機(jī)器的CPU時(shí)間。
我們假設(shè)同樣代碼量的程序,需要同樣多的CPU時(shí)間,進(jìn)行從代碼到最終能跑的“轉(zhuǎn)換”。那么把這種工作全部放在了開發(fā)者的機(jī)器上進(jìn)行的iOS顯然就 更具優(yōu)勢(shì),因?yàn)橛脩粼诖蜷_APP之前不需要再浪費(fèi)時(shí)間進(jìn)行“轉(zhuǎn)換”,這部分時(shí)間由開發(fā)者“忍受”了。而Android程序啟動(dòng)相對(duì)較慢就是因?yàn)榈诙?ldquo;轉(zhuǎn) 化”需要在打開程序時(shí)進(jìn)行引起的。這兩種機(jī)制是歷史的產(chǎn)物,總體上不能說誰好誰壞,只有適用范圍的問題。考慮到手機(jī)屬于體驗(yàn)要求比較高的設(shè)備,顯然iOS 這種機(jī)制更合適。所以這兩種機(jī)制帶來的后果就是,iOS總是比Android快,而且是天生的。
現(xiàn)在ART的出現(xiàn)代表了什么?代表了Android在啟動(dòng)程序時(shí)將像iOS一樣,無須進(jìn)行第二次“轉(zhuǎn)換”工作了。ART把第二次“轉(zhuǎn)換”所要使用的 時(shí)間放在“程序安裝時(shí)”進(jìn)行,而不再是“程序啟動(dòng)時(shí)”進(jìn)行。這樣做雖然安裝程序時(shí)要慢一點(diǎn),但是在使用時(shí)就會(huì)明顯快起來。按我的淺薄理解,就是把以前每次 啟動(dòng)程序都要做的工作改成“一次性”的工作,放在用戶不那么在乎的安裝時(shí)完成。這從長(zhǎng)期來看也降低了總體的“轉(zhuǎn)換”時(shí)間。
試想一個(gè)程序,安裝后你使用了N次。按原先Dalvik的方法(術(shù)語叫Just-in-time compilation),N次啟動(dòng)就需要進(jìn)行N次這樣的“轉(zhuǎn)換”。但是按照ART的方法(術(shù)語叫Ahead-of-time compilation),不管這個(gè)程序你使用幾次,都只發(fā)生一次“轉(zhuǎn)換”。這也解釋了為什么使用ART會(huì)降低CPU的使用頻率,進(jìn)而降低電量的使用。
當(dāng)然,ART也會(huì)帶來其他的負(fù)面影響。其一是增加程序安裝所需的時(shí)間,只是目前還不知道具體會(huì)是多少。考慮到其他技術(shù)因素,這個(gè)時(shí)長(zhǎng)的增加可能比我 為了講解方便所舉的“第二次轉(zhuǎn)換”所需的時(shí)長(zhǎng)要長(zhǎng)一點(diǎn),但是肯定不會(huì)長(zhǎng)到無法忍受的地步。據(jù)我查到的資料,這個(gè)變化對(duì)小程序幾乎可以忽略不計(jì),受影響的應(yīng) 該是以游戲?yàn)橹鞯某绦颍驗(yàn)樗麄儽旧泶a量就更大。不過這跟你獲得的收益也是成正比的,因?yàn)锳RT可以讓你在打開游戲時(shí)省更多的時(shí)間。如果將來都是“后臺(tái) 安裝”的話,對(duì)用戶體驗(yàn)更是微乎其微,你去看幾個(gè)新聞這時(shí)間就過去了。
第二個(gè)缺點(diǎn)是會(huì)使安裝后的文件占用更多的空間,據(jù)稱是10%-20%的增長(zhǎng)。不過不要緊,這個(gè)增長(zhǎng)指的是對(duì)“代碼”部分文件的增加,比如一個(gè) 100M的游戲,可能代碼只有20M,剩下80M是圖片和音樂等文件,所以即便增加20%的安裝所需空間,也只不過多了4M而已,在動(dòng)輒16G,32G, 甚至128G容量的智能手機(jī)面前,影響更是微乎其微。
據(jù)我了解,ART這個(gè)項(xiàng)目其實(shí)在2年前就已經(jīng)開始了,只不過之前一直不受關(guān)注,只有零星的報(bào)道,畢竟“計(jì)劃不等于現(xiàn)實(shí)”嘛。可是現(xiàn)在Android 4.4版本以“開發(fā)者預(yù)覽”的形式將其呈現(xiàn)出來,目的就是讓手機(jī)廠商、應(yīng)用開發(fā)者等進(jìn)行測(cè)試,從而幫助該項(xiàng)目進(jìn)行改進(jìn)。從我得到的信息來看,ART的穩(wěn)定 性并不差,完全可以勝任日常使用。
這也是為什么我會(huì)說,Android 4.4的ART選項(xiàng)可能預(yù)示著Android 5.0系統(tǒng)會(huì)出現(xiàn)重大改變——徹底從Dalvik轉(zhuǎn)換到ART。 如果真的是這樣的話,iOS開發(fā)人員和其用戶所引以為傲的流暢體驗(yàn)將不再是一個(gè)值得炫耀的東西,因?yàn)檫@種體驗(yàn)將隨著登陸Android平臺(tái)變得“大眾化”,再加上Android市場(chǎng)占有率的巨大優(yōu)勢(shì)、Google Play商店的崛起,iOS設(shè)備還能靠什么支撐自己的高價(jià)策略?