APP啟動時白屏時間過長問題的優化
一、App啟動分類
1、冷啟動
App在後臺被清除或者第一次啟動時,此啟動方式,從點選應用圖示到顯示介面會經歷以下過程:
2、暖啟動
3、熱啟動
這兩種啟動一般不會出現較長的白屏時間,這裡不做考慮,也可以參考冷啟動優化方式。
二、白屏時間主要影響因素
1、裝置效能
2、App的程序個數
3、白屏的Total Time : Application的onCreate()執行時間 + Activity的onCreate()執行時間
對於一個大型的App來說,通常會把相關的第三方SDK的初始化置於Application的onCreate()方法中。
三、解決辦法
1、由於白屏總時間等於Application的onCreate()執行時間 + Activity的onCreate()執行時間,所以不要在這兩處方法中進行耗時操作,可以將其推後執行或放在子執行緒中執行。
2、對於多程序的應用來說,每新建一個程序就會初始化Application一次,即會執行Application的onCreate()方法多次,所以將只需要在主程序中初始化的方法推後至Activity的onCreate()中執行。對於只在特定程序中需要初始化的部分方法,可以在Application的onCreate()方法中依據程序名去判斷是否需要執行初始化。
3、如果在初始化過程中需要讀取自定義Prop配置檔案或者SharedPref快取,若配置較多則將啟動應用所必需的部分單獨初始化。
四、除錯
1、在Studio的日誌窗,輸入Tag關鍵字:Display
則可以看到應用自點選圖示至渲染出畫面所耗時間。下圖即為個人除錯應用優化前後的Display時間:
優化前:
優化後:
2、精確除錯某段程式碼執行時間
在需要測算執行時間的那段程式碼前後加上:
Debug.startMethodTracing("name");
/** start 需要測算執行時間的程式碼段*/
......
/** end 需要測算執行時間的程式碼段*/
Debug.stopMethodTracing();
然後執行App後會在裝置的SD卡根目錄下生成name.trace檔案,用Android Studio可以將此檔案開啟,從而得到這段程式碼的執行時間詳細引數,例如下:
圖中上半部分為各方法執行時間統計圖,下方為各個方法詳細的執行時間引數(包含其子方法),其中各列引數含義:
Name | Invocation Count | Inclusive Time (us) | Exclusive Time (us) |
---|---|---|---|
方法名 | 方法呼叫次數 | 該方法及其呼叫的子方法的耗時 | 該方法(不包含呼叫的子方法)的耗時 |
.
.
.
以上,歡迎補充。