如需轉(zhuǎn)載請評論或簡信,并注明出處,未經(jīng)允許不得轉(zhuǎn)載

系列文章
目錄

前言
啟動速度是一個app對用戶來說的第一體驗,如果啟動速度慢就會給用戶的第一印象不太好,這里我們可以參考”八秒定律“
八秒定律是在互聯(lián)網(wǎng)領(lǐng)域存在的一個定律,即指用戶訪問一個網(wǎng)站時,如果等待網(wǎng)頁打開的時間超過8秒,會有超過70%的用戶放棄等待
本系列文章將進行App啟動優(yōu)化相關(guān)講解,本節(jié)我們先來了解一下App啟動的分類
啟動分類
冷啟動
當(dāng)啟動應(yīng)用時,后臺沒有該應(yīng)用的進程,這時系統(tǒng)會重新創(chuàng)建一個新的進程分配給該應(yīng)用,這個啟動方式就是冷啟動
大致流程
當(dāng)點擊app的啟動圖標(biāo)后,首先會通過AMS在System進程展示一個Starting Window(通常情況下是個白屏,可以通過設(shè)置Application的theme修改),接著AMS會通過Zygote創(chuàng)建應(yīng)用程序的進程,并通過一系列的步驟后調(diào)用Application的attachBaseContext()、onCreate()然后最終調(diào)用Activity的onCreate()/onStart/onResume以及contentView的measure/layout/draw最終顯示在界面上

冷啟動耗時最多,是app啟動時長的衡量標(biāo)準(zhǔn)
熱啟動
在后臺已有進程的情況下,系統(tǒng)會從已有的進程中來啟動應(yīng)用,這個方式叫熱啟動(例:按back鍵、home鍵,應(yīng)用雖然會退出,但是該應(yīng)用的進程是依然會保留在后臺,可進入任務(wù)列表查看)。熱啟動因為會從已有的進程中來啟動,所以熱啟動就不會走Application這步了,而是直接走MainActivity(包括一系列的測量、布局、繪制),所以熱啟動的過程只需要創(chuàng)建和初始化一個MainActivity就行了,而不必創(chuàng)建和初始化Application。顯然熱啟動比冷啟動更快
參考文檔:App startup time
總結(jié)
本文介紹了了冷啟動和熱啟動以及它們對應(yīng)的啟動流程,在明白了流程之后我們才能有針對性的對各個步驟進行優(yōu)化,從而加快啟動時間