Android的每次版本升級都會帶來一些改變冤吨,有些改變對于應用開發(fā)者來說并沒有什么影響,但對于一些重大的改變,我認為Android開發(fā)是必要關注和了解一下的,有些改變也許會成為以后的Android進化方向惜浅。
面試時,我也比較喜歡問一些每個版本的不同之外伏嗜,或者問問對方喜歡哪個新版本的特性(如Android 7.0的新特性)坛悉。如果比較了解每個版本的不同之外,一般來說都是實踐經(jīng)驗比較豐富的承绸,很多都是踩過坑的裸影。而對新版本是否關注,其實也是一個檢測一個人的學習熱情最好的題目军熏,興趣是最好的老師空民,對Android有熱情的人很容易從各種途徑獲知相關的資訊。而沒有興趣的人羞迷,仿佛與世無爭界轩,只要還能用原來的方式寫代碼就感覺沒有學習新東西的必要。
如衔瓮,ART和Dalvik浊猾,對于應用開發(fā)者來說是無縫過渡的,那么你不奇怪Google是怎么做到的嗎热鞍?
面試題:知道什么是ART嗎葫慎?它和Dalvik有什么區(qū)別?
我們知道到薇宠,計算機只能識別機器碼偷办,而Java的運行是將class字節(jié)碼在JVM上進行解析最后再翻譯成機器碼執(zhí)行。Dalvik虛擬機就是針對Android應用(.dex)的一個JVM澄港,雖然他們實現(xiàn)和原理有很多不同椒涯,但我們可以簡單這樣理解。
每個應用的進程中都會有一個Dalvik虛擬機實例回梧,它們是相互獨立的废岂,一個應用的Dalvik虛擬機Crash了并不影響其他的。APK應用在運行時狱意,就需要Dalvik虛擬機去加載類并轉化成機器碼執(zhí)行湖苞,這個過程就是JIT(Just-In-Time),雖然dex經(jīng)過優(yōu)化會生成一個odex文件详囤,但這個過程仍然是運行時讓編譯器去解釋字節(jié)碼财骨,相當于多了一道轉換工序,對性能的影響不小。
在Android 4.4的版本里用戶還可以選擇是用Dalvik還是ART隆箩,而5.0后的版本直接換成了ART滑肉,把Dalvik刪除了。
而ART(Android runtime)和Dalvik不一樣的地方摘仅,就是想法去掉了中間解釋字節(jié)碼的過程靶庙,Dalvik是JIT的機制,與JIT相對的是AOT(Ahead-Of-Time)娃属,它發(fā)生在程序運行之前六荒。如我們用靜態(tài)語言(例如C/C++)來開發(fā)應用程序的時候,編譯器直接就把它們翻譯成目標機器碼矾端。這種靜態(tài)語言的編譯方式也是AOT的一種掏击。
但是很多Android應用開發(fā)者并不知道有ART的存在,因為ART虛擬機并不要求開發(fā)者將自己的應用直接編譯成目標機器碼秩铆,而是在應用安裝時由ART將應用的dex字節(jié)碼翻譯成本地機器碼砚亭。所以你會發(fā)現(xiàn),新的版本安裝應用的時間比之前要長一點殴玛。
小結
關于ART方面捅膘,我也沒有深入研究,有些東西確實是需要興趣或者壓力才能深入進去的滚粟。我們在應用層上開發(fā)寻仗,基本上也很少涉及Framework層以下的修改,但是我們一定要改變一些想法凡壤,如感覺和我們無關的就不舍得花時間看一看署尤,然后故步自封偏安一隅。你不看清楚外面的東西亚侠,怎么確認和你有沒有關呢曹体?