在開發(fā)過程中我們發(fā)現(xiàn)在啟動有些app的時候佳遂,出現(xiàn)短時間黑屏或者白屏閃爍之后進入開屏頁面杜窄,但是有些app在啟動的過程中沒有這種現(xiàn)象衙吩,因此要處理這個問題,我們首先要找出為什么會出現(xiàn)這種情況囱持。
其實在應用的啟動過程中,會去加載布局文件焕济,如果布局文件比較復雜或者嵌套層級較多的情況下纷妆,會出現(xiàn)這種黑白屏閃爍的情況,主要是因為在還沒加載到布局文件的時候晴弃,先顯示window窗口背景奸鸯,黑屏白屏就是window窗口背景。我們可以通過代碼模擬這種場景伏嗜。便于理解
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 注意:添加3秒睡眠装哆,以確保黑屏一會兒的效果明顯,在項目應用要去掉這3秒睡眠
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 在這里之前旗国,黑屏或者白屏都是window的背景顏色枯怖,是窗口背景,還沒到界面的布局呢能曾,要執(zhí)行setContentView后才顯示布局
setContentView(R.layout.activity_launcher);
}
那window窗口背景在那里提供呢度硝?在提供theme里面肿轨,如下提供的是白色背景,那就是啟動時白屏一會兒的顏色設(shè)置蕊程。
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/white</item>
<!-- All customizations that are NOT specific to a particular API-level can go here. - ->
</style>
所以椒袍,在theme設(shè)置windowBackground就可以解決啟動時白屏黑屏一會兒了。
下面是解決方法:
思路:給啟動頁設(shè)置一個和啟動頁樣式相同的背景藻茂。
步驟:4步
1驹暑,在drawable目錄下新建一個根節(jié)點為layer-list的xml文件,如launch.xml辨赐,在xml中做出和開屏圖一樣的效果优俘,我的開屏圖是由兩個ImageView拼接的,因此我的layer-list類似如下(根據(jù)自己的開屏圖對應編寫自己的launch.xml文件)掀序。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white_FFFFFF"></item>
<item android:bottom="@dimen/len_100dp">
<bitmap
android:src="@drawable/launch_view_bg"
android:tileMode="disabled" />
</item>
<item
android:height="@dimen/len_100dp"
android:gravity="bottom">
<bitmap
android:gravity="bottom"
android:src="@drawable/splash_bottom_logo" />
</item>
</layer-list>
2帆焕,給開屏Activity設(shè)置主題,并設(shè)置背景屬性windowBackground為launch.xml
<style name="StartAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:fitsSystemWindows">false
<item name="android:windowNoTitle">true
<item name="android:windowIsTranslucent">false
<item name="android:windowFullscreen">true
<item name="android:windowBackground">@drawable/launch
</style>
3不恭,在開屏頁中設(shè)置全屏和狀態(tài)欄透明
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
4叶雹,華為劉海屏兼容(在清單文件中設(shè)置給開屏activity)
<meta-data android:name="android.notch_support" android:value="true"/>
通過以上四個步驟,能消除應用啟動過程中的黑白屏閃爍問題换吧,并實現(xiàn)在未加載出啟動頁布局前展示windowbackground與加載成功啟動頁之間的無感切換折晦。