解決啟動白屏問題
阿新 • • 發佈:2019-01-08
一般情況下 我們在啟動APP的時候,螢幕會出現一段時間的白屏或者黑屏,不同的裝置可能白屏黑屏顯示的時間長短不同,裝置硬體較差的時間都會比較長,這顯然影響使用者體驗。現在我們來分析這個問題產生的原因。
當我們在啟動一個應用時,系統會去檢查是否已經這樣存在一個程序,如果沒有則表示系統對應用進行冷啟動,系統和APP本身都有很多工作需要處理。首先系統的服務會先檢查startActivity中的intent的資訊,然後在去建立程序,最後才是執行啟動Acitivy的操作。而我們上面提到的顯示白黑屏的問題,就是在這段時間內產生的。
系統在繪製頁面載入佈局之前,首先會初始化視窗(Window),而在進行這步操作時,系統會根據我們設定的Theme來指定它的Theme主題顏色。Window佈局的頂層是DecorView,StartingWindow顯示一個空DecorView,我們在Style中的設定就決定了顯示的是白屏還是黑屏。
解決方法
瞭解上面的原因後,既然黑白屏是更具我們設定的Theme來決定了,那我們就可以直接從啟動頁的Theme入手,解決這個問題。
1.在AndroidManifest檔案中設定:
<activity
android:name=".SplashActivity"android:screenOrientation="portrait"android:theme="@style/Theme.MyAppTheme">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
2.在styles檔案中定義:
<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>
如上,我們給啟動頁設定一個全屏的背景圖片,這樣就不用顯示預設的主題顏色了。
按照以上配置,這樣就能避免白屏問題了。