(三十)冷啟動優(yōu)化面試問題

一、什么是冷啟動

1.冷啟動的定義

? 冷啟動就是啟動應(yīng)用前,系統(tǒng)中沒有該應(yīng)用的任何進程信息的時候啟動應(yīng)用的方式。

2.冷啟動/熱啟動的區(qū)別

? 熱啟動:用戶使用返回鍵退出應(yīng)用,然后馬上又重新啟動應(yīng)用。

冷啟動特點 :因為系統(tǒng)會重新創(chuàng)建新的進程分配,所以先會創(chuàng)建會初始化Application類,再創(chuàng)建和初始化Activity類,然后會進行一些測量、布局、繪制等等的操作,最后顯示在界面上。

熱啟動特點 :因為會從已有的進程來啟動,所有熱啟動不會走Application這個類,而是直接走MainActivity進行一些測量、布局、繪制,最后顯示在界面上。

3.冷啟動時間的計算

這個時間值從應(yīng)用啟動(創(chuàng)建進程)開始計算,到完成視圖的第一次繪制完成(即Activity內(nèi)容對用戶可見)為止。

二、冷啟動流程

1.Zygote進程中fork創(chuàng)建出一個新的進程。

2.創(chuàng)建和初始化Application類、創(chuàng)建MainActivity類。

3.inflate布局、當onCreate/onStart/onResume方法都走完。

4.contentView的measure/layout/draw顯示在界面上。

總結(jié):

Application的構(gòu)造器方法-->attachBaseContext()-->onCreate()-->Activity的構(gòu)造方法-->onCreate()-->配置主題中背景等屬性-->onStart()-->onResume()-->測量布局繪制顯示在界面上。

三、如何對冷啟動進行優(yōu)化

1.減少onCreate()方法的工作量。

2.不要讓Application參與業(yè)務(wù)操作。

3.不要在Application進行耗時操作。

4.不要在Application里面以靜態(tài)變量的方式保存數(shù)據(jù)。

5.盡量減少布局的復雜性和深度。

6.減少在主線程做資源的加載,可以通過懶加載延遲所有的初始化,或者把資源的初始化放在子線程中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,174評論 25 708
  • 請保持淡定,分析代碼,記住:性能很重要。 啟動時間優(yōu)化 毫無疑問,應(yīng)用的啟動速度越快越好。 本文可以幫助你優(yōu)化應(yīng)用...
    Mupceet閱讀 11,955評論 5 19
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,644評論 19 139
  • Activity是什么 Activity是四大組件之一,它提供一個界面讓用戶點擊和各種滑動操作 Activity棧...
    叫我吹神閱讀 2,873評論 0 4
  • 若不是簡書里一個作者強力的推薦和自己獨特的見解,我想我一定不會這么饒有興致的讀下去,光環(huán)下的人物總是以悲劇結(jié)束,這...
    Ashley澤TS閱讀 211評論 0 0

友情鏈接更多精彩內(nèi)容