Android 開機速度優(yōu)化

開機速度經(jīng)常被用來做為競品比較的一個參數(shù),開機快容易給用戶一種機器運行較快的錯覺。以致于MTK開發(fā)出快速開機的功能,是一個假關(guān)機的功能,SystemServer并沒有掛掉,從而達到快速開機的功能(大概可在5秒內(nèi)開機)。但其還是存在耗電的。
本文著力于Android上開機速度的優(yōu)化。

從開機的流程上來耗時較長的有以下幾點:

==preload classes和resource==
所有的Android應(yīng)用程序都是從Zygote進程fork出來的,所以為了共享一些class和resourse資源,Zygote進程初始化過程中,會預(yù)先加載一些常用的java class和資源文件到進程的內(nèi)存中,這樣其他應(yīng)用fork出來后就不用再次加載了,從而提高了應(yīng)用的啟動速度。

這個過程是可以精簡和優(yōu)化的,你可以減少一些classes和resource的加載,也可以啟用多線程來進行加載,從而加快系統(tǒng)的啟動速度。

本過程涉及到的文件

/system/etc/preloaded-classes

frameworks/base/core/res/res/values/arrays.xml

==PMS 加載application==
在systemServer中會先啟動PMS,然后讓其加載應(yīng)用,默認會去搜索system/app/,system/priv-app/,等,會讀取它的AndroidManifest.xml,獲取信息,還會判斷其是否有odex優(yōu)化,如果沒優(yōu)化,會對其進行優(yōu)化。

這個過程也是非常耗時的,預(yù)裝的apk文件越少,系統(tǒng)啟動速度也就越快,因此,精簡預(yù)裝apk也是優(yōu)化系統(tǒng)啟動速度最重要的手段之一。要想減少預(yù)裝的apk文件,則需要分析系統(tǒng)的build文件,將不需要的apk編譯選項刪除掉

==啟動相關(guān)service==
Android OS的啟動本質(zhì)上就是啟動一系列的本地服務(wù)和Java服務(wù),Android系統(tǒng)的所有功能都是通過這些服務(wù)間接提供的。

這些服務(wù)有很多并不是必須啟動的,根據(jù)業(yè)務(wù)需求可以去掉一些,本過程涉及到的文件:

system/core/rootdir/init.rc

frameworks/base/services/java/com/android/server/SystemServer.java

==Bootanimation 消失==
在所有的service都起來了之后,會通知surfaceflinger去關(guān)掉bootanimation.在通知之前會判斷其是否要顯示壁紙,鎖屏,要等這些需要顯示的應(yīng)用都準備好了之后才會通知surfaceflinger關(guān)掉bootanimation.所以可以通過先把需要顯示的應(yīng)用所涉及的service先進行啟動,如需要等待壁紙,則可先將wallpaperService進行systemRunning()。

在SurfaceFlinger去關(guān)掉bootanimation時,可以觀察其是否立即停止。在HiCam的項目中,就發(fā)現(xiàn)在通知停止之后會等待280ms左右才消失,最后發(fā)現(xiàn)是在停止是會等待動畫的2幀的時間才去停止動畫。

PS: 優(yōu)化啟動動畫,降低幀率和圖片尺寸,也可以達到優(yōu)化開機速度的效果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容