Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發環境 >> Android系統刷機後第一次啟動很慢的原因

Android系統刷機後第一次啟動很慢的原因

編輯:Android開發環境

       在做Android內核開發的過程中,我們會發現,每次編譯完系統源碼,燒錄到設備/手機中後,第一次啟動都會很慢很慢,要好幾分鐘甚至十幾分鐘,為什麼會出現這樣的現象呢?系統刷機後第一次啟動與後面再次啟動有什麼不同呢?

       要解答這個問題,首先我們需要了解一下Android Dalvik虛擬機,以及Dalvik-cache。

       由於嵌入式設備內存有限、CPU處理器不夠強大、功耗敏感等原因,Google沒有使用標准的JVM虛擬機,而是為Android單獨開發了Dalvik虛擬機。

       Dalvik虛擬機與JVM虛擬機有很大不同,它運行的是經過優化和壓縮的DEX字節碼,與標准的JAR字節碼並不一樣,占用空間更小,而且還可以進一步優化,Android SDK中專門提供了dx工具把傳統的Java字節碼轉換為Dalvik虛擬機可以運行的DEX字節碼,這個轉換過程是在程序編譯的時候就完成了,這就是為什麼我們可以用Java來編寫能運行於Android Dalvik虛擬機的程序的原因了。關於這個過程,下面這張示意圖比較直觀:

Android系統刷機後第一次啟動很慢的原因

       為了便於傳播,Android SDK將程序編譯後的DEX字節碼文件、資源文件、lib庫、AndroidManifest.xml等文件一起打包壓縮為apk文件(其實就是一個zip壓縮文件),因此,apk的安裝與卸載其實就是對這個zip壓縮包裡面的文件進行解壓分析拷貝和優化的過程。

       由於DEX字節碼位於apk壓縮包中,因此,如果程序啟動的時候,每次都要從apk文件中解壓提取DEX字節碼,明顯效率不高,因此,Android系統設計了如下策略:

       (1) 創建一個"dalvik-cache"文件夾,專門存放DEX字節碼,具體位於/data/dalvik-cache

       (2) 系統第一次啟動時,掃描所有的預裝apk文件,提取程序的DEX字節碼,經過優化後,存放到dalvik-cache目錄中

       (3) 每次安裝新的apk的時候,也同樣提取DEX字節碼,優化後放入dalvik-cache目錄中

       (4) 用戶點擊應用圖標後,直接從dalvik-cache目錄中快速加載優化過的DEX字節碼,這樣程序就可以很快的啟動了。

       理解了上述原理,本文探討的問題也就迎刃而解了,Android系統刷機後第一次啟動時,需要掃描所有預裝的apk文件,提取dex字節碼,優化並且拷貝到/data/dalvik-cache緩存目錄中,因此,第一次啟動耗時會明顯更高。

       擴展閱讀: 《Dalvik Optimization and Verification With dexopt》

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved