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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM