1. 程式人生 > >解決啟動Android應用程式時出現白屏或者黑屏的問題

解決啟動Android應用程式時出現白屏或者黑屏的問題

通過設定主題來防止白屏或者黑屏

一般情況下,啟動頁面通常是全屏的,而且會用一張圖片來展示使用者開啟應用程式後第一眼看到的介面。在手機中點選應用程式的圖示到應用程式顯示完MainActivity的檢視這個過程中,通常會用一到兩秒的時間。在預設activity的主題下(Light or Black),這兩秒螢幕就會出現白屏(Light)或者黑屏(Black)- 實際上是activity預設的主題中的android:windowBackground為白色或者黑色導致的。

1. 設定android:windowBackground屬性

<style name="WelcomeContentOverlay"
parent="@android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowIsTranslucent">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowFullscreen">true</item> <item name="android:windowNoTitle"
>true</item> <item name="android:windowBackground">@drawable/welcome_launch_bg</item>
</style>

通過設定android:windowBackground屬性,讓一張圖片作為視窗的背景圖,使開啟MainActivity第一眼看到的介面是一張圖片而不是白屏或者黑屏。設定這個屬性來顯示一張背景圖還有一個效果就是啟動應用程式會感覺非常快,而且與載入MainActivity的contentView是非同步的。

2. 設定android:windowIsTranslucent屬性

   <style name="WelcomeContentOverlay" parent="@android:style/Theme.NoTitleBar.Fullscreen">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@null</item>
    </style>

通過設定android:windowIsTranslucent屬性,表明該視窗是半透明的,這樣也不會出現白屏或者黑屏。但是,它和MainActivity的顯示是同步,如果在MainActivity啟動的時候,有過多複雜的操作,就會出現在手機中點選了應用程式的圖示之後,但過兩秒才會開啟應用程式不好的卡頓體驗效果。

3. 設定android:windowDisablePreview屬性

 <style name="WelcomeContentOverlay" parent="@android:style/Theme.NoTitleBar.Fullscreen">
        <item name="android:windowDisablePreview">true</item>
    </style>

通過設定android:windowDisablePreview屬性,禁用視窗的預覽動畫,
在MainActivity顯示之前,系統永遠不會使用視窗的主題來顯示它的預覽,這也保證了不會出現白屏或者黑屏。但是,與設定android:windowIsTranslucent屬性一樣,如果在MainActivity啟動的時候,有過多複雜的操作,就會出現在手機中點選了應用程式的圖示,但過兩秒才會開啟應用程式不好的卡頓體驗效果。

最後,設定好MainActivity的主題:

<activity
    android:screenOrientation="portrait"
    android:name=".MainActivity"
    android:theme="@style/WelcomeContentOverlay">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

另外:在activity中,可以通過
Drawable drawable = getWindow().getDecorView().getBackground();來獲得預設的或者設定的background。

總結:一般情況下,為了讓使用者有更好的體驗,建議設定
android:windowBackground屬性來防止啟動Android應用程式時出現的白屏或者黑屏。但記住為了螢幕適配,設定的這張背景圖的格式應該是.9.png的。