1.什么是冷啟動
冷啟動其實就是應(yīng)用第一次啟動,或者說啟動之后后臺被殺掉了又重新啟動app的情況.比如小米通過菜單鍵殺掉應(yīng)用后臺,重新啟動app.
應(yīng)用冷啟動的時候其實會在Application做一些初始化工作,大部分第三方都是在Application初始化的.初始化完才會啟動SplashActivity做初始化工作,然后才是進入MainActivity.這其中看起來很簡單,其實可以對app的體驗優(yōu)化做很多文章...
2.冷啟動為什么會有一段白屏
系統(tǒng)本身加載帶來的耗時
Application初始化工作.其實上面已經(jīng)說了,當應(yīng)用冷啟動的時候Application先做初始化工作,導(dǎo)致了SplashActivity無法及時初始化,也就沒東西顯示出來.
SplashActivity的OnCreate中存在耗時操作,或者布局過于復(fù)雜導(dǎo)致布局解析耗時過久.
3.解決辦法
優(yōu)化Application中的邏輯.使用異步加快進入SplashActivity,用事務(wù)總線(Eventbus,otto)延遲加載.
使用異步處理SplashActivity的OnCreate中的邏輯
但是這種處理其實還是會有一小段白屏或者黑屏,這是系統(tǒng)本身初始化工作導(dǎo)致的,無法避免...那么為什么QQ,微信不會呢?
這時候我們只需要給啟動頁添加一個主題Theme
<style name="StartAppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowFullscreen">true</item> //設(shè)置滿屏,沒有狀態(tài)欄,不需要可去掉
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/ic_welcome</item> //設(shè)置歡迎頁圖片
<item name="android:windowContentOverlay">@null</item>
</style>
<activity
android:name=".activity.WelcomeActivity"
android:theme="@style/StartAppTheme" //就是上面那個主題
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>