在學習新知識的過程當中,我一直很推薦結合實戰任務去學習,只有經歷實戰,才能加深對理論知識的理解。《Android內核開發》系列已經寫了八篇了,本文就結合前面的內容,給你們佈置一個實戰任務: 優化Android系統的啓動速度。java
這裏我簡單介紹一下優化的基本思路和涉及的文件,具體細節由你們本身在實踐去摸索,提升本身Google能力和解決問題的能力。linux
Android系統的啓動優化主要分爲三大部分:android
(1) Bootloader優化微信
(2) Linux Kernel的剪裁與優化學習
(3) Android OS部分的剪裁與優化優化
本文重點關注Android OS部分的啓動優化,值得關注的優化點分別介紹以下:動畫
1. 精簡preload的classes和resourceui
前面介紹過,因爲全部的Android應用程序都是從Zygote進程fork出來的,因此爲了共享一些class和resourse資源,Zygote進程初始化過程當中,會預先加載一些經常使用的Java class和資源文件到進程的內存中,這樣其餘應用fork出來後就不用再次加載了,從而提升了應用的啓動速度。.net
這個過程是能夠精簡和優化的,你能夠減小一些classes和resource的加載,從而加快系統的啓動速度。本過程涉及到的文件:3d
frameworks/base/preload-classes
frameworks/base/core/res/res/values/arrays.xml
2. 精簡native service和Java service
前面介紹過,Android OS的啓動本質上就是啓動一系列的本地服務和Java服務,Android系統的全部功能都是經過這些服務間接提供的。
這些服務有不少並非必須啓動的,根據業務需求能夠去掉一些,本過程涉及到的文件:
system/core/rootdir/init.rc
frameworks/base/services/java/com/android/server/SystemServer.java
3. 精簡預裝的apk文件
系統啓動過程當中,會掃描系統指定目錄下的全部apk文件,這個過程也是很是耗時的,預裝的apk文件越少,系統啓動速度也就越快,所以,精簡預裝apk也是優化系統啓動速度最重要的手段之一。
要想減小預裝的apk文件,則須要分析系統的build文件,將不須要的apk編譯選項刪除掉,本過程涉及到的文件:
build/target/product/xxxx.mk
device/<company>/<product>/xxxx.mk
vendor/..../xxxx.mk
4. 減小內核的log打印級別
過多的log打印消息會顯著地增長系統啓動的時間,log打印級別有多處能夠調整,推薦修改init.rc文件中的loglevel來改變log打印級別。
system/core/rootdir/init.rc
5. 其餘優化手段
上面介紹的都是最經常使用的優化手段,其實還有不少其餘的方法,簡單列舉以下:
(1) 優化啓動動畫,下降幀率和圖片尺寸
(2) 精簡系統,減少boot.img文件大小,能夠顯著減小啓動過程當中加載和解壓boot.img的時間
(3) 預先建立一些目錄和文件,而不是在init過程當中建立
(4) 其餘……
6. 小結
這裏我給出一位國外的高手優化的結果做爲比較和參考(個人優化結果只提升了40%的啓動速度,遠沒有達到他的效果):
關於Android系統的啓動速度優化就介紹到這裏了,真心但願初學者們可以動手去實踐,在實踐中逐漸掌握內核開發的基本流程和技巧,而後慢慢深刻理解系統的基本原理和理論知識。
結束語
免費學習更多精品課程,登陸樂搏學院官網http://h.learnbo.cn/
或關注咱們的官方微博微信,還有更多驚喜哦~
本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/1664754