一般情況下 我們?cè)趩?dòng)APP的時(shí)候,屏幕會(huì)出現(xiàn)一段時(shí)間的白屏或者黑屏,不同的設(shè)備可能白屏黑屏顯示的時(shí)間長(zhǎng)短不同薪韩,設(shè)備硬件較差的時(shí)間都會(huì)比較長(zhǎng),這顯然影響用戶體驗(yàn)“贫В現(xiàn)在我們來(lái)分析這個(gè)問(wèn)題產(chǎn)生的原因俘陷。
當(dāng)我們?cè)趩?dòng)一個(gè)應(yīng)用時(shí),系統(tǒng)會(huì)去檢查是否已經(jīng)這樣存在一個(gè)進(jìn)程观谦,如果沒(méi)有則表示系統(tǒng)對(duì)應(yīng)用進(jìn)行冷啟動(dòng)拉盾,系統(tǒng)和APP本身都有很多工作需要處理。首先系統(tǒng)的服務(wù)會(huì)先檢查startActivity中的intent的信息豁状,然后在去創(chuàng)建進(jìn)程盾剩,最后才是執(zhí)行啟動(dòng)Acitivy的操作雷激。而我們上面提到的顯示白黑屏的問(wèn)題,就是在這段時(shí)間內(nèi)產(chǎn)生的告私。
系統(tǒng)在繪制頁(yè)面加載布局之前屎暇,首先會(huì)初始化窗口(Window),而在進(jìn)行這步操作時(shí)驻粟,系統(tǒng)會(huì)根據(jù)我們?cè)O(shè)置的Theme來(lái)指定它的Theme主題顏色根悼。Window布局的頂層是DecorView,StartingWindow顯示一個(gè)空DecorView蜀撑,我們?cè)赟tyle中的設(shè)置就決定了顯示的是白屏還是黑屏挤巡。
解決方法
了解上面的原因后,既然黑白屏是更具我們?cè)O(shè)置的Theme來(lái)決定了酷麦,那我們就可以直接從啟動(dòng)頁(yè)的Theme入手矿卑,解決這個(gè)問(wèn)題。
1.在AndroidManifest文件中設(shè)置:
<activity
android:name=".SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.MyAppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
2.在styles文件中定義自己的style修改它的android:windowBackground這個(gè)屬性:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textCursorDrawable">@drawable/cursor</item>
<item name="android:listDivider">@drawable/recycler_divider_bg</item>
</style>
<style name="Theme.MyAppTheme" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@drawable/launchimage</item>
<item name="android:windowFullscreen">true</item>
</style>
這樣沃饶,我們給啟動(dòng)頁(yè)設(shè)置一個(gè)全屏的背景圖片母廷,這樣就不用顯示默認(rèn)的主題顏色了。
按照以上配置糊肤,這樣就能避免白屏問(wèn)題了琴昆。
style 一定要使用自定義的,不要改系統(tǒng),否則會(huì)報(bào)錯(cuò)