Android App啓動時出現黑屏或者白屏的解決辦法

1、爲什麼App啓動時會出現白屏或者黑屏?

   當打開一個Activity時,如果這個Activity所屬的應用還沒有在運行,系統會爲這個Activity所屬的應用創建一個進程,但進程的創建與初始化都需要時間,在這個動作完成之前系統要做什麼呢?如果沒有任何反應的話,如果程序初始化的時間很長,用戶可能還以爲沒有點到相應的位置。但此時所啓動的程序還沒初始化完,既無法顯示程序,又不能停在原處不做任何動作,怎麼辦?這就有了Starting Window的概念,也可以稱之爲Preview Window   Starting Window就是一個用於在應用程序進程創建並初始化成功前顯示的臨時窗口,擁有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前顯示這個窗口,以告知用戶系統已經知道了他要打開這個應用並做出了響應,當程序初始化完成後顯示用戶UI並移除這個窗口。
    顯示白屏或者黑屏,是由你的啓動Activity或者Application來決定的。如果你使用的是Light主題,那麼就可能出現白屏;如果你使用的是Black主題,那麼就可能出現黑屏。當你設置Light或者Black主題時,Starting Window顯示的就是你啓動Activity的android:windowBackground屬性,所以纔會出現白屏或者黑屏的情況。

2、怎麼解決啓動白屏或者黑屏問題呢?

在style.xml文件中爲啓動的Activity設置主題,設置android:windowBackground屬性爲啓動Activity顯示的閃屏圖片,這樣纔有APP秒開的效果。設置android:windowFullscreen屬性爲true,使閃屏圖片全屏顯示。設置windowNoTitle屬性爲true,隱藏Activity的ActionBar顯示。

<!-- 防止歡迎頁白屏或者黑屏,設置圖片 -->
<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@mipmap/a</item>
    <item name="android:windowFullscreen">true</item>
    <item name="windowNoTitle">true</item>
    <!--<item name="android:windowIsTranslucent">false</item>-->
    <!--<item name="android:windowDisablePreview">true</item>-->
</style>

然後,在清單文件AndroidManifest.xml中,爲啓動的Activity設置主題SplashTheme。

<activity
    android:name=".activity.SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

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

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章