代碼不優(yōu)化
在構(gòu)建App時,我們經(jīng)常需要引用一些第三方的sdk,而項目業(yè)務越多,引用的第三方也越多,有些第三方會要求我們在Application的onCreate方法中對其初始化。這意味著:在application的onCreate方法中執(zhí)行時間會被越長,首個Activity布局的渲染時間也會相應的拉長。
同理,如果我們在Activity的onCreate, onStart,onResume方法中執(zhí)行的任務時間過長,同樣也會導致布局被渲染的時間拉長。這樣直接導致的問題就是,用戶會感覺頁面遲遲沒有加載出來,用戶體驗極差。
測量啟動時間
在Android4.4及更高的版本中。logcat包括一個輸出行,其中包含命名為
Displayed的值,此值代表從啟動進程到在屏幕上完成對應 Activity 繪制所經(jīng)
通過adb命令
adb shell am start -W com.xykaye/.MainActivity
// 運行結(jié)果
ThisTime:最后一個Activity啟動時間
TotalTime:一系列Activity啟動時間
WaitTime:總啟動時間,包含系統(tǒng)在冷啟動時,需要加載app信息到內(nèi)存的時間
手動打印檢測
public void onCreate(){
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory(),"app.trace");
Debug.startMethodTracing(file.getAbsolutePath());
// 其他業(yè)務邏輯代碼
init();
test();
Debug.stopMethodTracing();
}
// 獲取trace文件命令
adb pull /storage/emulated/0/app.trace
手動打印日志計算啟動時間,只能記錄應用內(nèi)耗時
優(yōu)化目標 減少代碼執(zhí)行時間:
- 采用異步線程的方式來進行處理
1.異步線程中使用的api不能創(chuàng)建handler
2.不能有UI操作
3.對異步要求不高 - 延時初始化
- 懶加載
-
空閑時初始化
test.png
