通常狀況下,App的啓動分爲冷啓動和熱啓動。git
App點擊啓動前,它的進程不在系統裏,須要系統新建立一個進程給它啓動的狀況,這是一次完成的啓動過程。github
APP在冷啓動後被用戶退到後臺,在App的進程還在系統裏的狀況下,用戶從新啓動進入App的過程,這個過程所作的事情很是少。app
通常來講,App的啓動時間,是指用戶點擊App開始,到用戶看到第一個界面以前的時間。包含以下三個階段:異步
main()函數執行前,系統主要作下面幾件事。函數
因此通常優化啓動速度的話能夠作以下幾件事:大數據
main()函數執行後的階段,指的是從main()函數執行開始,到appDelegate的didFinishLaunchingWithOptions方法裏首屏渲染相關方法執行完成。優化
首頁的業務代碼都是要在這個階段,主要包括了:線程
在平常操做中,咱們老是把各類初始化工做都放到這個階段執行,致使渲染完成滯後。指針
更加優化的方法應該是:在功能上梳理出那些是首屏渲染必要的初始化功能,哪些是App啓動必要的初始化功能,哪些是在對應功能開始使用才須要初始化的。將這些初始化功能分別放到合適的階段執行。cdn
這個階段是從渲染完成時開始,到didFinishLaunchingWithOptions方法做用域結束時結束。
這個階段用戶已經能夠看到App的首頁信息了,因此優化的優先級排在最後。可是那些卡住主線程的方法仍是須要最優先處理的。
主要是功能級別優化和方法級別優化。
從main()函數執行後這個階段下手。
優化的思路是:main()函數開始執行到首屏渲染完成前,只處理首屏相關的業務,其餘非首屏業務的初始化、監聽註冊、配置文件的讀寫等都放到首屏渲染完成後去作。
這個階段主要是檢查首屏渲染完成前,主線程上有哪些耗時方法,將沒必要要的耗時方法滯後或者異步執行。