啟動(dòng)優(yōu)化(中篇)
本文鏈接:https://blog.csdn.net/feather_wch/article/details/131587046
1、我們可以優(yōu)化部分
Application構(gòu)建到主界面onWindowFocusChanged
2、啟動(dòng)方式(官方)
- 冷啟動(dòng)
- 熱啟動(dòng)
- 溫啟動(dòng)
3、怎么樣算是卡頓?
- 卡頓:2-5-8原則
- 2秒以內(nèi):流程
- 2-5秒:可以接受
- 5-8秒:有些卡頓
- 8秒以上:非常卡頓,沒辦法接受,垃圾應(yīng)用
4、Android Vitals是什么?
- google提出的計(jì)劃,檢測(cè)三種啟動(dòng)方式的耗時(shí)
- 冷5 熱1.5 溫2
5、如何查看App啟動(dòng)耗時(shí)時(shí)長(zhǎng)?(app點(diǎn)擊->可操作的時(shí)候onWindowFocuseChanged)
- 系統(tǒng)日志統(tǒng)計(jì):
ActivityManager:Displayed
- adb 命令統(tǒng)計(jì)啟動(dòng)時(shí)間:
adb shell am start -S -W
6、CPU Profile/TraceView(廢棄)相關(guān)圖表
- Call Chart
- Flame Chart
- Top Down Tree
- Bottom Up Tree
7、假如版本不支持CPU Profiler怎么辦?
- Debug.start/stopMethodTracing()
- Application創(chuàng)建時(shí)調(diào)用start(需要手動(dòng)給予文件權(quán)限)
- onWindowFocuseChanged調(diào)用stop
- 文件默認(rèn)生成在/sdcard/目錄下,可以拖到AS中打開
8、StrictMode 嚴(yán)苛模式 setThreadPolicy()/setVmPolicy()
可以在開發(fā)階段嚴(yán)格限制各個(gè)耗時(shí)操作、IO未關(guān)閉等等
出現(xiàn)違規(guī)操作根據(jù)配置,選擇打印日志或者崩潰。
9、黑白屏各個(gè)版本差異
- windowSplashscreenContent Android8~Andorid11 優(yōu)先于windowBackground
- Android12推出JectPack SplashScreen(基于Android SplashScreen API)同名庫(kù)兼容到Andorid 6
- windowDisablePreview:會(huì)關(guān)閉黑白屏,但是進(jìn)入時(shí)間更長(zhǎng)更慢,體驗(yàn)不好
- 自定義簡(jiǎn)易的SplashScreenActivity+windowDisablePreview:可以做到進(jìn)入可以打開一個(gè)有節(jié)日氛圍的頁(yè)面
10、如何減少inflate的時(shí)間?
- AsyncLayoutInflater幫助異步Inflate減少啟動(dòng)時(shí)間
11、AsyncLayoutInflater的局限性:
- 構(gòu)建的View中沒有Looper.prepare()需要我們自己去實(shí)現(xiàn)(子線程)
- 不支持設(shè)置LayoutInflater.Factory和LayoutInflater.Factory2
- 緩存隊(duì)列默認(rèn)大小10,超過(guò)了會(huì)導(dǎo)致主線程等待
12、EventBus、Arouter啟動(dòng)和初始化很耗時(shí),可以采用接入插件來(lái)減少初始化時(shí)間,優(yōu)化啟動(dòng)速度。
13、啟動(dòng)優(yōu)化項(xiàng)的幾個(gè)方面
- 合理使用異步初始化、延遲初始化、懶加載
- 啟動(dòng)過(guò)程避免耗時(shí)操作,數(shù)據(jù)庫(kù)IO不放在主線程
- 類加載優(yōu)化:提前異步執(zhí)行類加載
- 合理使用IdleHandler進(jìn)行延遲初始化
- 簡(jiǎn)化布局
14、應(yīng)對(duì)面試的處理步驟??!
- 告訴對(duì)方,啟動(dòng)耗時(shí)統(tǒng)計(jì)的方案。
- 分析工具
- 發(fā)現(xiàn)了一些第三方庫(kù)初始化比較耗時(shí),可以放到子線程中處理。有些不可以。
- ARouter啟動(dòng)時(shí)間很慢,看github發(fā)現(xiàn)有新版本的插件可以使用,提升了啟動(dòng)速度
15、啟動(dòng)速度和內(nèi)存優(yōu)化也有關(guān)系?為什么會(huì)有影響?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-531874.html
- 和抖動(dòng)和GC有關(guān)
16、字節(jié) multidex 優(yōu)化啟動(dòng)速度 => 誤導(dǎo)讀者文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-531874.html
- 文中分析源碼,用多進(jìn)程去優(yōu)化multidex速度,多進(jìn)程本身只是不為了讓APP ANR
- 修改了谷歌的multidex,谷歌multidex會(huì)將dex -> zip 比較耗時(shí)。真正優(yōu)化在于去除了該步驟。
到了這里,關(guān)于Android啟動(dòng)流程優(yōu)化 中篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!