有些人會(huì)覺Android應(yīng)用沒有iOS應(yīng)用使用得流暢,我覺得主要原因有以下幾點(diǎn):
第一螟炫,因?yàn)锳ndroid平臺(tái)相較于iOS起步晚波附,平臺(tái)不成熟,初期的開發(fā)者水平也有限昼钻,沒有很關(guān)注性能優(yōu)化掸屡,只是想做出可用的應(yīng)用,而未做出好用的應(yīng)用换吧。
第二折晦,Android相對(duì)比較開放,讓開發(fā)者發(fā)揮的空間比較大沾瓦。比如開發(fā)后臺(tái)永生進(jìn)程满着、肆意搜集手機(jī)使用信息等這些會(huì)影響手機(jī)整體性能的行為理論上都是可以做得到,所以有些開發(fā)者就利用這種開放性贯莺,不顧用戶體驗(yàn)风喇,做了很多上不了臺(tái)面的小動(dòng)作,導(dǎo)致手機(jī)整體使用體驗(yàn)被拖累缕探。
第三魂莫,Dalvik運(yùn)行時(shí)機(jī)制導(dǎo)致了Android應(yīng)用相對(duì)iOS會(huì)慢一些,所以Android團(tuán)隊(duì)在4.4版本后使用Art運(yùn)行時(shí)替代了Dalvik爹耗,下面我們?cè)敿?xì)分析下為什么Dalvik運(yùn)行時(shí)會(huì)導(dǎo)致慢耙考。
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í)間。
在編譯Android程序時(shí)肮雨,首先java代碼被編譯成class文件遵堵,然后被java打包工具dx打包成.dex文件, Dex是DalvikVM executes的簡稱,即Android Dalvik執(zhí)行程序怨规。然后.dex文件和資源文件一起被壓縮成apk文件鄙早。APK其實(shí)也是zip格式,只是后綴被修改為了apk椅亚。Android應(yīng)用安裝過程:復(fù)制APK安裝包到data/app目錄下,解壓并掃描安裝包舱污,把dex文件(Dalvik字節(jié)碼)保存到dalvik-cache目錄呀舔,并data/data目錄下創(chuàng)建對(duì)應(yīng)的應(yīng)用數(shù)據(jù)目錄。這樣每次用戶點(diǎn)擊圖標(biāo)運(yùn)行android程序時(shí)扩灯,dalvik虛擬機(jī)就會(huì)用JIT的方法把dex文件翻譯為機(jī)器碼執(zhí)行媚赖。雖然Dalvik虛擬機(jī)已被做過很多優(yōu)化,但因?yàn)榇朔N機(jī)制的存在珠插,所以Android在電量消耗和程序運(yùn)行流暢程度上一直不敵iOS惧磺。
Android 4.4版本后這種情況會(huì)有很大改觀,Android 4.4采用ART模式捻撑,可以在用戶第一次安裝應(yīng)用時(shí)磨隘,字節(jié)碼就會(huì)預(yù)先編譯成機(jī)器碼,使其成為真正的本地應(yīng)用顾患。不過也因?yàn)檫@一點(diǎn)番捂,一個(gè)應(yīng)用會(huì)占用更大的rom空間,第一次安裝時(shí)間也會(huì)變長江解。但它帶來的好處是遠(yuǎn)遠(yuǎn)大于這些缺點(diǎn)的设预。
以下是Art和Dalvik的對(duì)比圖
上文只代表一家言論,歡迎大家吐槽犁河。