android冷啓動與熱啓動面試知識小結

今天我們來學習Android 冷啓動、熱啓動方面的知識。

一、什麼是冷啓動、熱啓動?

  • 冷啓動:
    在啓動應用時,系統中沒有該應用的進程,這時系統會創建一個新的進程分配給該應用;

  • 熱啓動:
    在啓動應用時,系統中已有該應用的進程(例:按back鍵、home鍵,應用雖然會退出,但是該應用的進程還是保留在後臺);

二、冷啓動、熱啓動的區別

  • 冷啓動:系統沒有該應用的進程,需要創建一個新的進程分配給應用,所以會先創建和初始化Application類,再創建和初始化MainActivity類(包括一系列的測量、佈局、繪製),最後顯示在界面上。
  • 熱啓動: 從已有的進程中來啓動,不會創建和初始化Application類,直接創建和初始化MainActivity類(包括一系列的測量、佈局、繪製),最後顯示在界面上。

三、冷啓動時間的計算

  • API19 之後,系統會出打印日誌輸出啓動的時間;
  • 冷啓動時間 = 應用啓動(創建進程) —> 完成視圖的第一次繪製(Activity內容對用戶可見);

四、冷啓動流程

  • Zygote進程中fork創建出一個新的進程;
  • 創建和初始化Application類、創建MainActivity;
  • inflate佈局、當onCreate/onStart/onResume方法都走完;
  • contentView的measure/layout/draw顯示在界面上;

總結:
Application構造方法 –> attachBaseContext() –> onCreate() –> Activity構造方法 –> onCreate() –> 配置主題中背景等屬性 –> onStart() –> onResume() –> 測量佈局繪製顯示在界面上。

五、冷啓動的優化

  • 減少在Application和第一個Activity的onCreate()方法的工作量;
  • 不要讓Application參與業務的操作;
  • 不要在Application進行耗時操作;
  • 不要以靜態變量的方式在Application中保存數據;
  • 減少佈局的複雜性和深度;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章