Android 冷啟動白屏問題
阿新 • • 發佈:2019-01-09
今天把玩公司App發現了一個有趣的現象。啟動app白屏。之前沒太留意過;在參照大廠App解決白屏的方案後。簡單彙總一下。
前言
冷啟動:App第一次啟動的時候會載入一個Application程序,首先會建立和初始化Appliation類,然後在載入Activity。
熱啟動:利用後臺已經擁有的程序,從而避免了Application的載入。直接去載入Activity。
解決白屏的方案大致有以下四種
- 加入動畫
- 使用佔位圖
- 使用圖片
- 使用windowDisablePreview屬性
這裡我就描述一下使用佔位圖和windowDisablePreview屬性
windowDisablePreview屬性
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowDisablePreview">true</item>
</style>
在AndroidManifest中設定主Activity的theme值,在主Activity中還原。
@Override
protected void onCreate (@Nullable Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
getWindow().setBackgroundDrawableResource(R.drawable.main_splash_bg);
super.onCreate(savedInstanceState);
}
執行後發現啟動App延遲幾秒後跳轉到主Activity(有點類似掌上英雄聯盟,會讓使用者誤以為是自己手機的問題)。
使用佔位圖
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/shape_launch</item>
<item name="android:windowFullscreen">true</item>
</style>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@android:color/white"/>
<item>
<bitmap
android:src="@mipmap/main_splash_bg"
android:gravity="fill" />
</item>
</layer-list>
使用windowBackground屬性來完成其他操作同windowDisablePreview屬性的設定。執行後發現明顯白屏問題得到有效解決。
參考文獻