今天把玩公司App發(fā)現(xiàn)了一個有趣的現(xiàn)象啡莉。啟動app白屏。之前沒太留意過欲鹏;在參照大廠App解決白屏的方案后。簡單匯總一下臭墨。
前言
冷啟動:App第一次啟動的時候會加載一個Application進程赔嚎,首先會創(chuàng)建和初始化Appliation類,然后在加載Activity胧弛。
熱啟動:利用后臺已經(jīng)擁有的進程尤误,從而避免了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);
}
運行后發(fā)現(xiàn)啟動App延遲幾秒后跳轉到主Activity(有點類似掌上英雄聯(lián)盟掺冠,會讓用戶誤以為是自己手機的問題)。
使用占位圖
<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屬性的設置。運行后發(fā)現(xiàn)明顯白屏問題得到有效解決德崭。