1、為什麼 APP 啟動時會出現白屏或者黑屏? 當打開一個 Activity 時,如果這個 Activity 所屬的應用還沒有在運行,系統會為這個 Activity 所屬的應用創建一個進程,但進程的創建與初始化都需要時間,在這個動作完成之前系統要做什麼呢?如果沒有任何反應的話,如果程式初始化的時間很 ...
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 顯示。
1 <!-- 防止歡迎頁白屏或者黑屏,設置圖片 --> 2 <style name="SplashTheme" parent="AppBaseTheme"> 3 <item name="android:windowBackground">@drawable/img_welcome</item> 4 <item name="android:windowFullscreen">true</item> 5 <item name="windowNoTitle">true</item> 6 <!--<item name="android:windowIsTranslucent">false</item>--> 7 <!--<item name="android:windowDisablePreview">true</item>--> 8 </style>
然後,在清單文件 AndroidManifest.xml 中,為啟動的 Activity 設置主題 SplashTheme。
1 <activity 2 android:name=".ui.WelcomeActivity" 3 android:theme="@style/SplashTheme"> 4 <intent-filter> 5 <action android:name="android.intent.action.MAIN" /> 6 <category android:name="android.intent.category.LAUNCHER" /> 7 </intent-filter> 8 </activity>
此外,如果設置 android:windowIsTranslucent 屬性,表明該視窗是半透明的,這樣也不會出現白屏或者黑屏。但是,它和 MainActivity 的顯示是同步,如果在 MainActivity 啟動的時候,有過多複雜的操作,就會出現在手機中點擊了應用程式的圖標之後,但過兩秒才會打開應用程式不好的卡頓體驗效果。
如果設置 android:windowDisablePreview 屬性,禁用視窗的預覽動畫, 在 MainActivity 顯示之前,系統永遠不會使用視窗的主題來顯示它的預覽,這也保證了不會出現白屏或者黑屏。但是,與設置 android:windowIsTranslucent 屬性一樣,如果在 MainActivity 啟動的時候,有過多複雜的操作,就會出現在手機中點擊了應用程式的圖標,但過兩秒才會打開應用程式不好的卡頓體驗效果。
3、還有沒有其他解決方案?
以上方式可以實現 APP 秒開,但是我不想顯示一張圖片,那麼你也可以顯示純顏色,或者純顏色加小圖標。
Starting Window 顯示純顏色,直接設置 android:windowBackground 屬性為顏色代碼:
1 <item name="android:windowBackground">@color/colorAccent</item>
Starting Window 顯示純顏色加圖標,需要在 Drawable 中定義一個 splash.xml 文件:
1 <?xml version="1.0" encoding="utf-8"?> 2 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 3 <!-- 背景顏色 --> 4 <item android:drawable="@color/green" /> 5 <item> 6 <!-- 圖片 --> 7 <bitmap 8 android:gravity="center" 9 android:src="@drawable/icon_welcome" /> 10 </item> 11 </layer-list>
轉載自:http://sendtion.cn/archives/506