亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android內核開發:為什么刷機后系統第一次啟動會很慢?

發布時間:2020-06-29 22:53:37 來源:網絡 閱讀:11366 作者:Jhuster 欄目:移動開發

在做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》


關于Android系統刷機后第一次啟動的特點就簡單介紹到這里了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霸州市| 仁寿县| 宣恩县| 循化| 文水县| 颍上县| 涡阳县| 保定市| 拉孜县| 宜春市| 司法| 济源市| 泰来县| 西乡县| 图们市| 蒲城县| 滦平县| 湖州市| 新兴县| 格尔木市| 乳山市| 青川县| 蒲江县| 财经| 定西市| 贵德县| 和政县| 峨眉山市| 大足县| 寿宁县| 隆尧县| 碌曲县| 屯昌县| 西平县| 海兴县| 习水县| 锡林浩特市| 乌苏市| 固安县| 五莲县| 从江县|