
可能有人要問(wèn)了,這不是挺好的一個(gè)歡迎界面嗎?有啥問(wèn)題,我相信看的仔細(xì)的看官會(huì)發(fā)現(xiàn)啟動(dòng)之后有一段時(shí)間是空白的,即使是很短,讓人看著也不舒服,這時(shí)候可能又有人說(shuō)了,那可能是你在application里面干了耗時(shí)的事才導(dǎo)致的,話說(shuō)我一開始也是這樣覺(jué)得的,然后我令寫一個(gè)demo作測(cè)試,發(fā)現(xiàn)然而并不關(guān)你的application什么事兒,因?yàn)槲叶紱](méi)有application,啟動(dòng)的時(shí)候依然有這樣的問(wèn)題,然后我就去對(duì)比我手機(jī)上騰訊公司和其他公司的產(chǎn)品,我發(fā)現(xiàn)他們的app大多是在你手指按下桌面圖標(biāo)的時(shí)候,先“靜止”一段時(shí)間,然后再啟動(dòng),而且中間一點(diǎn)白色的間隙也沒(méi)有,這是什么鬼,帶著疑惑,我去百度了一番,發(fā)現(xiàn)問(wèn)題還真有:

后來(lái)我才之后,原來(lái)有冷熱啟動(dòng)這一說(shuō):
1、冷啟動(dòng):當(dāng)啟動(dòng)應(yīng)用時(shí),后臺(tái)沒(méi)有該應(yīng)用的進(jìn)程,這時(shí)系統(tǒng)會(huì)重新創(chuàng)建一個(gè)新的進(jìn)程分配給該應(yīng)用,這個(gè)啟動(dòng)方式就是冷啟動(dòng)。
特點(diǎn):冷啟動(dòng)因?yàn)橄到y(tǒng)會(huì)重新創(chuàng)建一個(gè)新的進(jìn)程分配給它,所以會(huì)先創(chuàng)建和初始化application類,再創(chuàng)建和初始化MainActivity類(包括一系列的測(cè)量、布局、繪制),最后顯示在界面上。
2、熱啟動(dòng):當(dāng)啟動(dòng)應(yīng)用時(shí),后臺(tái)已有該應(yīng)用的進(jìn)程(例:按back鍵、home鍵,應(yīng)用雖然會(huì)退出,但是該應(yīng)用的進(jìn)程是依然會(huì)保留在后臺(tái),可進(jìn)入任務(wù)列表查看),所以在已有進(jìn)程的情況下,這種啟動(dòng)會(huì)從已有的進(jìn)程中來(lái)啟動(dòng)應(yīng)用,這個(gè)方式叫熱啟動(dòng)。
特點(diǎn):熱啟動(dòng)因?yàn)闀?huì)從已有的進(jìn)程中來(lái)啟動(dòng),所以熱啟動(dòng)就不會(huì)走application這步了,而是直接走MainActivity(包括一系列的測(cè)量、布局、繪制),所以熱啟動(dòng)的過(guò)程只需要?jiǎng)?chuàng)建和初始化一個(gè)MainActivity就行了,而不必創(chuàng)建和初始化application,因?yàn)橐粋€(gè)應(yīng)用從新進(jìn)程的創(chuàng)建到進(jìn)程的銷毀,application只會(huì)初始化一次。
既然上述問(wèn)題不是出在application,那么肯定就是在Activity了,我是這么想的,然后我就想著是不是SetContentView的時(shí)候花了很多時(shí)間呢?然后我又測(cè)試了一遍:
@OverridePRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); long startTime = System.currentTimeMillis(); setContentView(R.layout.activity_start); Log.d(TAG, "time===" + (System.currentTimeMillis() - startTime));}然后打印出來(lái)的時(shí)間是:

哈,果真是setContentView導(dǎo)致的,那就很好解決了,我們不要setContentView就好了,可能還有人要問(wèn)了,你不要setContentView你咋加載布局呢?別急,別忘了還有theme這個(gè)好東西啊!我們可以定義一個(gè)theme,然后給theme設(shè)置背景就好了:
<style name="StartTheme" parent="Aipmap/icon_splash</item></style>好了,大功告成,我們來(lái)看看效果:

注:setContentView的內(nèi)部原理有興趣的同學(xué)可以自己去百度看看,看看在哪里耗時(shí)了
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注