APP啟動(dòng)分為兩類汇四,冷啟動(dòng)接奈,熱啟動(dòng)
1.冷啟動(dòng)是指, App 點(diǎn)擊啟動(dòng)前通孽,它的進(jìn)程不在系統(tǒng)里序宦,需要系統(tǒng)新創(chuàng)建一個(gè)進(jìn)程分配給它啟動(dòng)的情況。這是一次完整的啟動(dòng)過(guò)程背苦。
2.熱啟動(dòng)是指 互捌,App 在冷啟動(dòng)后用戶將 App 退后臺(tái)潘明,在 App 的進(jìn)程還在系統(tǒng)里的情況下,用戶重新啟動(dòng)進(jìn)入 App 的過(guò)程秕噪,這個(gè)過(guò)程做的事情非常少钳降。
這里我們主要講解冷啟動(dòng)的過(guò)程:
啟動(dòng)的時(shí)間段我這里分為三個(gè)階段
1.main()函數(shù)執(zhí)行前
1) 加載編譯各類庫(kù);
2)加載可執(zhí)行文件(App 的.o 文件的集合)腌巾;
3)加載動(dòng)態(tài)鏈接庫(kù)遂填,進(jìn)行 rebase 指針調(diào)整和 bind 符號(hào)綁定;
4)Objc 運(yùn)行時(shí)的初始處理澈蝙,包括 Objc 相關(guān)類的注冊(cè)吓坚、category 注冊(cè)、selector 唯一性檢查等灯荧;
5)初始化礁击,包括了執(zhí)行 +load() 方法、attribute((constructor)) 修飾的函數(shù)的調(diào)用逗载、創(chuàng)建 C++ 靜態(tài)全局變量等客税。
優(yōu)化建議:減少動(dòng)態(tài)庫(kù)的加載;減少加載后不會(huì)用的類與方法撕贞;+load() 方法里的內(nèi)容可以放到首屏渲染完成后再執(zhí)行更耻;減少c++全局變量的數(shù)量;
2.main()函數(shù)執(zhí)行后
main() 函數(shù)執(zhí)行后的階段捏膨,指的是從 main() 函數(shù)執(zhí)行開始秧均,到 appDelegate 的 didFinishLaunchingWithOptions 方法里首屏渲染相關(guān)方法執(zhí)行完成。過(guò)程包括:
1)首屏初始化的配置文件的讀取操作
2)首屏列表大量數(shù)據(jù)的讀取
3)首屏渲染的大量計(jì)算
優(yōu)化建議:功能上梳理出首頁(yè)離屏渲染必須要執(zhí)行的初始化方法号涯,把非必要在首頁(yè)離屏渲染初始化的方法放在首頁(yè)離屏渲染后初始化目胡;
3.首頁(yè)離屏渲染完成后
簡(jiǎn)單說(shuō)的話,這個(gè)階段就是從渲染完成時(shí)開始链快,到 didFinishLaunchingWithOptions 方法作用域結(jié)束時(shí)結(jié)束誉己。這個(gè)階段其實(shí)用戶已經(jīng)能夠看到首屏的東西了。(這塊如果沒(méi)有出現(xiàn)會(huì)卡住主線程的方法域蜗,啟動(dòng)優(yōu)化可以排在最后)
主要完成的是巨双,非首屏其他業(yè)務(wù)服務(wù)模塊的初始化、監(jiān)聽的注冊(cè)霉祸、配置文件的讀取等筑累。