1. 程式人生 > 其它 >Android冷啟動和熱啟動以及冷啟動優化方案

Android冷啟動和熱啟動以及冷啟動優化方案

Android冷啟動和熱啟動以及冷啟動優化方案

1、什麼是冷啟動和熱啟動

  1. 冷啟動:
    當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用,這個啟動方式就是冷啟動,也就是先例項化Application。
  2. 熱啟動:
    當啟動應用時,後臺已有該應用的程序(例:按back鍵、home鍵,應用雖然會退出,但是該應用的程序是依然會保留在後臺,可進入任務列表檢視),所以在已有程序的情況下,這種啟動會從已有的程序中來啟動應用,也就是直接從程序中啟動,不需要重新建立Application,這個方式叫熱啟動。

2、啟動的時候白屏/黑屏問題

  1. 引起白屏的原因
    白屏或黑屏,具體是哪一個,取決於app的Theme使用的是dark還是light主題Android Studio 引起的白屏2.x時代的AS開啟了instant run以後可能會導致白屏,但實際完整的apk包不會出現此問題冷啟動引起的白屏/黑屏點選你app那一刻到系統呼叫Activity.onCreate()之間的時間段。在這個時間段內,WindowManager會先載入app主題樣式中的windowBackground作為app的預覽元素,然後再真正去載入activity的layout佈局暖啟動/熱啟動引起的白屏/黑屏
    這點在配置較好,記憶體空間充足的手機上不是很明顯,但低端手機或者記憶體吃緊的情況下依舊會出現”閃屏”效果,持續時間很短,一閃而過

3、具體有哪些階段可優化呢?

點選app以後到初始化Application之間這段時間,系統接管,從Zygote程序中fork建立新程序,GC回收等等一系列操作,和我們app無關


從上圖可以看到,整個冷啟動流程中至少有兩處onCreate,分別是Application和Activity,整個流程都是可控的。所以,onCreate方法做的事情越多,冷啟動消耗的時間越長

4、啟動時間的計算

  1. Logcat 自動列印
    從Android 4.4(API 19)開始,Logcat自動幫我們打印出應用的啟動時間。這個時間從應用啟動(建立程序)開始計算,到完成檢視的第一次繪製(即Activity內容對使用者可見)為止。

  2. Activity的reportFullyDrawn()
    我們可以在Activity的任意位置呼叫此方法已列印你想看到的、執行完某個方法的最終時間。它會在Logcat裡列印從apk初始化(和前面Displayed的時間是一樣的)到reportFullyDrawn()方法被呼叫用了多長時間

5、優化方案

  1. 從啟動流程分析

    減少兩處onCreate()中的初始化操作,將部分初始化移動到IntentService中進行

  2. 從使用者體驗分析
    將app首頁的按返回鍵響應修改為響應Home鍵。讓使用者以為app確實退出了,但是實際上是點了Home鍵。如此一來,下次點選app圖示的時候,直接喚起,不需要進行初始化操作,主要可以避免再次走閃屏頁。

  3. 首介面載入
    利用Google官方文件推薦的方式,我們將啟動頁介面的主題設定為SplashTheme。此介面是冷啟動後首先載入的介面

冷啟動:冷啟動其實就是電腦啟動的一種方式,當電腦切斷電源,在關機狀態下按下POWER啟動計算機。

熱啟動:在計算機已經開啟的狀態下,通過選單,工作管理員,快捷鍵或鍵盤重新引導操作。

在APP中:

 當用戶啟動應用程式時,後臺沒有該應用程式的程序,這時系統會重新給應用程式分配一個程序,這種方法就叫冷啟動。

 當用戶啟動應用程式時,後臺已經有了該程式的程序(通過,退出,home鍵退出讓應用程式在後臺繼續執行)當再次點開APP馬上能夠恢復到上次使用的狀態,不需要再回到手機的首頁開啟應用程式,這個方式就叫熱啟動。

共同點:

無論是冷啟動還是熱啟動,都要重新上電,檢測硬體,將RAM區清零,即所有變數都初始化為0。