Android 4.4 ART :被忽略的重大預(yù)示
也許人們在得知Google新發(fā)布的Android系統(tǒng)版本名稱為4.4時都不以為然,認(rèn)為這個升級十分微不足道,只有0.1而已。就是安卓官方,對待此次升級也是頗為低調(diào)。
可是如果了解了4.4所暗示的變化時,所有Android開發(fā)者和其他利益相關(guān)者都必須打起十二分精神對看待4.4了。因為這次升級可能是Android在用戶體驗上大進(jìn)步的前奏。還有那些總是嘲笑Android機(jī)器運行緩慢的iOS開發(fā)者和其用戶也同樣需要重新審視自己的行為了。因為這種嘲笑在不久的將來可能會失去其根基。不僅僅是直觀體驗上的,更是底層技術(shù)上的。
首先說一下,我也是一個Android開發(fā)者,目前還在美國上學(xué),所以能夠接觸到一些一手資料,在國內(nèi)搜了搜,幾乎沒有什么相關(guān)文章,所以在這里跟大家進(jìn)行分享一下我的“發(fā)現(xiàn)”。
當(dāng)官方發(fā)布4.4時,我簡單瀏覽了一下Google+上官方賬戶發(fā)布的對該系統(tǒng)的簡介,覺得值得關(guān)注的只有兩點1.對內(nèi)存的需求降低了,2.支持更多的sensor。綜合起來,就是為可穿戴設(shè)備開路。確實沒有什么亮點可言,順應(yīng)了大的發(fā)展方向而已。隨后我預(yù)定了Nexus 5,圖個性價比。到手試用后第一感覺是“物美價廉”,對系統(tǒng)本身沒有太大的感覺。
后來為了進(jìn)行開發(fā)測試,我打開了“開發(fā)者模式”,其中有一個選項引起了我的注意,叫“選擇運行時環(huán)境”??蛇x項有Dalvik和ART,默認(rèn)是Dalvik,即Android一直以來使用的運行方式。這是之前版本都沒有的選項。為了弄明白這到底是個什么東西,我試著在Google上搜了一下,這一搜不要緊,直接改變了我對4.4版本存在意義的看法。僅僅因為這一個變化,4.4完全可以看做是5.0的前奏,或者說是試水版本。而且預(yù)示著5.0版可能會帶來重大改變,一個可以讓蘋果面臨變成下一個諾基亞、黑莓風(fēng)險的改變。當(dāng)然,我這話說的有點過,但是這個改變的重要性真的怎么說都不為過。
下面我就詳細(xì)介紹一下這個變化到底是什么,這些內(nèi)容可能對沒有編程背景的人無法馬上理解,但是我會盡量說的通俗一點。簡單地說,就是Android程序運行的根本機(jī)制改變了,程序會啟動地更快,而且會更省資源。表現(xiàn)在用戶體驗上,就是Android更流暢了,同時續(xù)航能力顯著增加。而且這種變化不是小打小鬧,而是非常可觀的!根據(jù)AndroidPolicy上專項文章(http://www.Androidpolice.com/201 ... s-debuts-in-kitkat/)的說法,這個改變可以讓部分Android程序的啟動加速50%,理論上待機(jī)時間也會顯著增加。根據(jù)該文后一些“小白鼠”們的評論,他們在試用了ART運行模式后都體會到了其帶來的速度提升和續(xù)航提升,而且效果非常明顯。這說明這個尚處在實驗階段的ART模式已經(jīng)能夠帶來明顯的好處,唯一不足的是,作為beta版,穩(wěn)定性欠佳。
如果你想知道其原理是什么,請接著往下看,我會解釋的很“大眾化”。Android是基于Java語言的,iOS是基于Obejctive-C的。很專業(yè)是嗎?不要緊,你不需要懂它們有什么區(qū)別、孰優(yōu)孰劣??炊旅娴木托?前者,即Java的代碼實際上需要兩次“轉(zhuǎn)換”才能最終以用戶可看的程序跑起來,一次發(fā)生在開發(fā)者發(fā)布安裝包前,使用開發(fā)者自己機(jī)器的CPU,另一次在用戶啟動APP前,使用手機(jī)的CPU。而后者,即Objective-C的代碼只需要一次這種“轉(zhuǎn)換”---在開發(fā)者發(fā)布安裝包前,所以只占用開發(fā)者機(jī)器的CPU時間。如果我們假設(shè)同樣代碼量的程序需要同樣多的CPU時間進(jìn)行從代碼到最終能跑的“轉(zhuǎn)換”。那么把這種工作全部放在了開發(fā)者的機(jī)器上進(jìn)行的iOS顯然就更具優(yōu)勢,因為用戶在打開APP之前不需要再浪費時間進(jìn)行“轉(zhuǎn)換”,這部分時間由開發(fā)者“忍受”了。而安卓程序啟動相對較慢就是因為第二次“轉(zhuǎn)化”需要在打開程序時進(jìn)行引起的。這兩種機(jī)制是歷史的產(chǎn)物,總體上不能說誰好誰壞,只有適用范圍的問題??紤]到手機(jī)屬于體驗要求比較高的設(shè)備,顯然iOS這種機(jī)制更合適。但是在企業(yè)環(huán)境下,兩次“轉(zhuǎn)換”式的解決方案有很多其他的優(yōu)勢,這里就沒必要展開說了,因為與話題無關(guān)。所以這兩種機(jī)制帶來的后果就是,iOS總是比Android快,而且是天生的!
現(xiàn)在ART的出現(xiàn)代表了什么?代表了Android在啟動程序時將像iOS一樣,無須進(jìn)行第二次“轉(zhuǎn)換”工作了。ART把第二次“轉(zhuǎn)換”所要使用的時間放在“程序安裝時”進(jìn)行,而不再是“程序啟動時”進(jìn)行。這樣做雖然安裝程序時要慢一點,但是在使用時就會明顯快起來。按我的淺薄理解,就是把以前每次啟動程序都要做的工作改成“一次性”的工作,放在用戶不那么在乎的安裝時完成。這從長期來看也降低了總體的“轉(zhuǎn)換”時間。試想一個程序,安裝后你使用了N次。按原先Dalvik的方法(術(shù)語叫Just-in-time compilation),N次啟動就需要進(jìn)行N次這樣的“轉(zhuǎn)換”。但是按照ART的方法(術(shù)語叫Ahead-of-time compilation),不管這個程序你使用幾次,都只發(fā)生一次“轉(zhuǎn)換”。這也解釋了為什么使用ART會降低CPU的使用頻率,進(jìn)而降低電量的使用。
當(dāng)然,ART也會帶來其他的負(fù)面影響。其一是增加程序安裝所需的時間,這一點在上文中已經(jīng)提到了原因,目前還不知道具體會是多少??紤]到其他技術(shù)因素,這個時長的增加可能比我為了講解方便所舉的“第二次轉(zhuǎn)換”所需的時長要長一點,但是肯定不會長到無法忍受的地步。我查到的資料顯示,這個變化對小程序幾乎可以忽略不計,受影響的應(yīng)該是以游戲為主的程序,因為他們本身代碼量就更大。不過這跟你獲得的收益也是成正比的,因為ART可以讓你在打開游戲時省更多的時間。如果將來都是“后臺安裝”的話,對用戶體驗更是微乎其微,你去看幾個新聞這時間就過去了。第二個缺點是會使安裝后的文件占用更多的空間,據(jù)稱是10%-20%的增長。不過不要怕,這個增長指的是對“代碼”部分文件的增加。比如一個100M的游戲,可能代碼只有20M,剩下80M是圖片和音樂等文件。所以即便增加20%的安裝所需空間,也只不過多了4M而已。跟你獲得的好處相比微不足道。更何況是在單位存儲空間價格極速下跌的21世紀(jì)?
最后,據(jù)我了解,ART這個項目其實在2年前就已經(jīng)開始了,只不過之前一直不受關(guān)注,只有零星的報道,畢竟那時候只是個“夢想”而已。可是現(xiàn)在,4.4版本以“開發(fā)者預(yù)覽”的形式將其呈現(xiàn)出來,目的就是讓手機(jī)廠商、應(yīng)用開發(fā)者等進(jìn)行測試,從而幫助該項目進(jìn)行改進(jìn)。從我得到的信息來看,ART的穩(wěn)定性并不差,完全可以勝任日常使用。這也是為什么我會說,4.4的ART選項可能預(yù)示著5.0系統(tǒng)會出現(xiàn)重大改變---徹底從Dalvik轉(zhuǎn)換到ART。其實從實際情況分析,這樣的轉(zhuǎn)換也是合情合理的。Java需要虛擬機(jī)進(jìn)行“二次轉(zhuǎn)換”才能跑是因為要實現(xiàn)跨平臺??墒菍ndroid來說,從某種意義上已經(jīng)是單一平臺的設(shè)備了,再使用兩次“轉(zhuǎn)換”意義不大。為了提升運行效率,重新設(shè)計運行時方法合情合理,而且沒有任何副作用。如果真的是這樣的話,iOS開發(fā)人員和其用戶所引以為傲的流暢體驗將不再是一個值得炫耀的東西,因為這種體驗將隨著登陸Android平臺變得“大眾化”。再加上Android市場占有率的巨大優(yōu)勢、Google Play商店的崛起,iOS設(shè)備還能靠什么支撐自己的高價策略?Apple身上的光環(huán)已經(jīng)隨喬布斯的離去而開始退去,iPhone走下神壇只會是時間問題。到了那個時候,iPhone NC中的C也就只能代表Cheap了。
本人并非計算機(jī)專業(yè)出身,專業(yè)背景是商科+IT技術(shù)。因此對技術(shù)的理解可能有偏差,如文中觀點有錯,歡迎指正。
Android 4.4上的測試版新虛擬機(jī)ART和老的Delvik之間的實際差距有多大呢?國外有網(wǎng)友就發(fā)布了兩個虛擬機(jī)的簡單對比,發(fā)現(xiàn)應(yīng)用啟動速度互有勝負(fù),但在應(yīng)用切換方面明顯就是ART更有優(yōu)勢。
Android 4.4擁有一個非常重要的隱藏功能,那就是正在測試當(dāng)中的ART Java虛擬機(jī),Google希望未來讓它來替代老的Dalvik,讓Android系統(tǒng)變得更流暢。這一個新的虛擬機(jī)在業(yè)內(nèi)受到廣泛關(guān)注,那么新虛擬機(jī)的表現(xiàn)又如何呢?近日國外有網(wǎng)友在Reddit上傳了兩個視頻,為大家?guī)砹瞬煌?strong>虛擬機(jī)在啟動和切換應(yīng)用的簡單對比。
用于對比的是兩臺從系統(tǒng)(ASOP Android 4.4 ROM)到安裝的應(yīng)用都相同的2013版Nexus 7,而運行環(huán)境則分別是ART和Dalvik。