Bugs-啟動APP時短暫白/黑屏現(xiàn)象的解決

原因分析

當打開一個Activity時,如果這個Activity所屬的應(yīng)用還沒有在運行,系統(tǒng)會為這個 Activity所屬的應(yīng)用創(chuàng)建一個進程,但進程的創(chuàng)建與初始化都需要時間,在這個動作完成之前系統(tǒng)要做什么呢?如果沒有任何反應(yīng)的話,如果程序初始化的時間很長,用戶可能還以為沒有點到相應(yīng)的位置。但此時所啟動的程序還沒初始化完,既無法顯示程序,又不能停在原處不做任何動作,怎么辦?這就有了Starting Window的概念,也可以稱之為Preview Window。

Starting Window就是一個用于在應(yīng)用程序進程創(chuàng)建并初始化成功前顯示的臨時窗口,擁有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前顯示這個窗口,以告知用戶系統(tǒng)已經(jīng)知道了他要打開這個應(yīng)用并做出了響應(yīng),當程序初始化完成后顯示用戶UI并移除這個窗口。

顯示白屏或者黑屏,是由你的啟動Activity或者Application來決定的。如果你使用的是Light主題,那么就可能出現(xiàn)白屏;如果你使用的是Black主題,那么就可能出現(xiàn)黑屏。當你設(shè)置Light或者Black主題時,Starting Window顯示的就是你啟動Activity的android:windowBackground屬性,所以才會出現(xiàn)白屏或者黑屏的情況。

如何解決

首先給一個最簡單的方法,在styles.xml文件中自定義啟動頁的theme:

 <!--解決啟動閃屏的問題-->
    <style name="LauncherTheme" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>  //設(shè)置窗口全屏
        <item name="android:windowIsTranslucent">true</item>  //設(shè)置窗口半透明
    </style>

將啟動頁的theme設(shè)置為自定義的theme

 <activity android:name=".main.ui.LauncherActivity"
    android:theme="@style/LauncherTheme">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>        
      </intent-filter>             
 </activity>

原理:將窗口背景設(shè)置成半透明后,系統(tǒng)將不會給窗口設(shè)置預(yù)覽界面;但是,它和MainActivity的顯示是同步,如果在MainActivity啟動的時候,有過多復(fù)雜的操作,就會出現(xiàn)在手機中點擊了應(yīng)用程序的圖標之后,但過兩秒才會打開應(yīng)用程序不好的卡頓體驗效果。

或者,參照同樣的道理,只要給窗口設(shè)置了背景色,系統(tǒng)就不會給窗口設(shè)置預(yù)覽界面;即:

 <!--解決啟動閃屏的問題-->
    <style name="LauncherTheme" parent="AppTheme">
        <item name="android:windowBackground">@color/colorAccent</item>//設(shè)置背景色
       <item name="android:windowNoTitle">true</item>  //設(shè)置窗口全屏
    </style>

或者

 <!--解決啟動閃屏的問題-->
    <style name="LauncherTheme" parent="AppTheme">
       <item name="android:windowBackground">@drawable/img_welcome</item> //設(shè)置背景圖片
       <item name="android:windowFullscreen">true</item> //設(shè)置全屏
       <item name="android:windowNoTitle">true</item>  //設(shè)置窗口全屏
    </style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容