1.首先需要衡量冷啟動時間的指標,才能看到優化的效果。
可以在Application的構造函數,或者 attachBaseContext,寫一個Trace.begin(Tag),然后在第一個Activity的onWindowFocusChanged 加入一個Trace.end消息,然后就可以用systrace方便的看到啟動的耗時,當然你也可以用自己打log算時間的方式來完成。
2.如何優化
1.使用工具
可以用systrace + 函數插樁,就是上面提到的Trace,
它還可以看到系統的一些關鍵事件,例如 GC、System Server、CPU 調度等。通過插樁,我們可以看到應用主線程和其他線程的函數調用流程,還可以輔助用Traceview (Profiler),看函數耗時,就是這個工具本身太過于耗損性能。
運用工具來找到耗時的操作 、性能瓶頸,進行有針對性的優化,這樣效果會更加顯著一些。
2.優化工作
1.閃屏頁面的windowbackground可以設置成啟動圖,防止黑白屏出現,秒開app。
2.業務梳理優化
啟動過程中,哪些是必須的、哪些是可以懶加載的,哪些是可以異步的,都需要一個一個梳理,一些第三方框架,初始化會有線程池、反射、反序列化等操作的是會影響主線程的加載的,可以放在工作線程中異步來加載這些,然后降低工作線程的優先級,保證主線程的優先執行。
3.I/O 優化
啟動過程讀了什么文件、多少個字節、Buffer 是多大、使用了多長時間、在什么線程等一系列信息,比如:SharedPreference 會讀入內存,
4.類重排、資源文件重排
Dex 文件用的到的類和安裝包 APK 里面各種資源文件一般都比較小,但是讀取非常頻繁。我們可以利用系統這個機制將它們按照讀取順序重新排列,減少真實的磁盤 I/O 次數。
Facebook :“資源熱圖”相對比較完善,也建設了一些配套的Dashboard 工具,希望后續可以開源出來。支付寶:https://mp.weixin.qq.com/s/79tAFx6zi3JRG-ewoapIVQ