一袋马、應(yīng)用的啟動過程
冷啟動啟動流程:
當(dāng)點擊app的啟動圖標(biāo)時虑凛,安卓系統(tǒng)會從Zygote進(jìn)程中fork創(chuàng)建出一個新的進(jìn)程分配給該應(yīng)用桑谍,之后會依次創(chuàng)建和初始化Application類祸挪、創(chuàng)建MainActivity類、加載主題樣式Theme中的
windowBackground等屬性設(shè)置給MainActivity以及配置Activity層級上的一些屬性雹仿、再inflate布局整以、當(dāng)onCreate/onStart/onResume方法都走完了后最后才進(jìn)行contentView的measure/layout/draw顯示在界面上公黑,所以直到這里,
應(yīng)用的第一次啟動才算完成人断,這時候我們看到的界面也就是所說的第一幀恶迈。所以蝉绷,總結(jié)一下,應(yīng)用的啟動流程如下:
Application的構(gòu)造器方法——>attachBaseContext()——>onCreate()——>Activity的構(gòu)造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量布局繪制顯示在界面上辆床。
二讼载、應(yīng)用的啟動方式
1中跌、冷啟動:當(dāng)啟動應(yīng)用時漩符,后臺沒有該應(yīng)用的進(jìn)程嗜暴,這時系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給該應(yīng)用闷沥,這個啟動方式就是冷啟動舆逃。
2、熱啟動:當(dāng)啟動應(yīng)用時路狮,后臺已有該應(yīng)用的進(jìn)程(例:按back鍵、在已有進(jìn)程的情況下涂籽,這種啟動會從已有的進(jìn)程中來啟動應(yīng)用又活,這個方式叫熱啟動
特點
1柳骄、冷啟動:冷啟動因為系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給它耐薯,所以會先創(chuàng)建和初始化Application類丝里,再創(chuàng)建和初始化MainActivity類(包括一系列的測量杯聚、布局幌绍、繪制)傀广,最后顯示在界面上。
2誓酒、熱啟動:熱啟動因為會從已有的進(jìn)程中來啟動靠柑,所以熱啟動就不會走Application這步了病往,而是直接走M(jìn)ainActivity(包括一系列的測量停巷、布局畔勤、繪制)扒磁,所以熱啟動的過程只需要創(chuàng)建和初始化一個MainActivity就行了妨托,而不必創(chuàng)建和初始化Application
三、解決冷啟動慢的方法優(yōu)化方案:
黑白屏產(chǎn)生原因:當(dāng)我們在啟動一個應(yīng)用時钧排,系統(tǒng)會去檢查是否已經(jīng)存在這樣一個進(jìn)程恨溜,如果不存在糟袁,系統(tǒng)的服務(wù)會先檢查startActivity 中的intent 的信息项戴,然后在去創(chuàng)建進(jìn)程肯尺,最后啟動Acitivy则吟,即冷啟動氓仲。
而啟動出現(xiàn)白黑屏的問題敬扛,就是在這段時間內(nèi)產(chǎn)生的朝抖。系統(tǒng)在繪制頁面加載布局之前治宣,首先會初始化窗口(Window)侮邀,而在進(jìn)行這一步操作時,系統(tǒng)會根據(jù)我們設(shè)
置的Theme 來指定它的Theme 主題顏色铝宵,我們在Style 中的設(shè)置就決定了顯示的是白屏還是黑屏鹏秋。
1.Application 優(yōu)化(懶加載,延時加載)
2.UI效果侣夷,背景圖
3.fragment的懶加載
4.延時加載