張紹文android開發高手課讀書筆記4-啟動優化篇
本系列博文 基於是前微信高階工程師張紹文專欄 《Android開發高手課》的讀書筆記。
文章所寫內容是本人讀完的感悟,需要原文的朋友請自行購買。
啟動優化篇
在說如何對啟動時間進行優化之前,我們得先知道從使用者點選應用圖示開始,一共經歷了那些階段。
主要階段如下圖.

image
T0~T1階段
這個階段是手機系統解析點選事件,效應快慢跟手機效能有關
T1~T2階段
系統在正式啟動應用之前,會根據應用設定的Theme設定一個預覽介面.
應用啟動白屏也是發生在這裡,如果你沒有設定對應的Theme,並且Activity的onCreate函式執行所需要的時間過長,就會出現白屏的情況.比較可行的解決方式是給啟動頁的Theme設定一張背景圖。如下
<activity android:name=".view.SplashActivity" android:theme="@style/LauncherTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <style name="LauncherTheme" parent="AppTheme"> <item name="android:windowBackground">@drawable/logo_bg</item> </style>
這樣的話,在點選應用圖示後,就會先顯示一張背景圖,
另外還可以將預覽視窗指定為透明的,這樣使用者在看到閃屏頁之前會一直帶著桌面,但這樣就會給使用者一種點了很久才會看到介面的感覺。
在預覽介面顯示之後,便會建立Application和閃屏頁,大部分應用都會在這個時候初始化各種功能.因而導致
預覽介面~閃屏介面顯示 這個時間會很長.
如何優化
除了必須要在Application中初始化的功能,我們可以把其他一些功能的初始化移到閃屏頁中,因為大多數應用的閃屏頁都會停留幾秒鐘。這裡還要注意的是,移到閃屏頁初始化的功能程式碼,不要放在onCreate生命週期下,而是另外開啟一個執行緒來做初始化行為。
另外,多執行緒的切換會影響CPU的效能.所以如果你的應用在啟動時需要開多個執行緒的話,需要考慮用執行緒池來維護
T2~T3階段
在閃屏頁顯示的時候,會開始主頁檢視的繪製,這個時候需要注意,因為之前說到,閃屏頁中會開啟子執行緒去初始化一些功能。如果需要初始化的模組過多,開始載入首頁的時候還沒初始化完成,恰巧這個時候首頁又需要用到這個模組.那這個時候就會報錯。
所以首頁需要用到的模組必須得在呼叫之前初始化成功。
T3~T4階段
首頁正常顯示了,但這個時候你不一定就能點選,問題還是在於有些功能模組的程式碼還未初始化完成。
總結
介面顯示上:
預覽視窗可以採用自由logo背景或者與閃屏頁共用,以防止白屏.
模組初始化:
application中初始化一部分必要的模組,閃屏頁通過子執行緒載入一部分模組,剩下的非緊急的模組用懶載入的方式,
其中懶載入要防止集中化,不然可能會出現一次載入太多,導致某個介面無法操作的情況。