在開發中,我們在啟動app的時候,屏幕會出現一段時間的白屏或者黑屏,不同設備時間長短不同。很影響用戶體驗。 首先分析一下,產生這個現象的原因,當我們在啟動一個應用時,系統會去檢查是否已經存在這樣一個進程,如果不存在,就是冷啟動。系統和APP本身都有很多工作需要處理。首先系統的服務會先檢查startA ...
在開發中,我們在啟動app的時候,屏幕會出現一段時間的白屏或者黑屏,不同設備時間長短不同。很影響用戶體驗。
首先分析一下,產生這個現象的原因,當我們在啟動一個應用時,系統會去檢查是否已經存在這樣一個進程,如果不存在,就是冷啟動。系統和APP本身都有很多工作需要處理。首先系統的服務會先檢查startActivity中的intent的信息,然後在去創建進程,最後才是執行啟動Acitivy的操作。而我們上面提到的顯示白黑屏的問題,就是在這段時間內產生的。
系統在繪製頁面載入佈局之前,首先會初始化視窗(Window),而在進行這一步操作時,系統會根據我們設置的Theme來指定它的Theme 主題顏色,Window 佈局的頂層時DecorView,StartingWindow顯示一個空DecorView,我們在Style中的設置就決定了顯示的是白屏還是黑屏。
最簡單的解決方法
既然黑白屏是根據我們設置的Theme來決定的,那我們就可以直接從啟動頁的Theme入手,解決這個問題。
第一步:在style文件中定義如下
<!--***************啟動頁Theme***************--> <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowNoTitle">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowBackground">@drawable/splash_pic</item> <item name="android:windowFullscreen">true</item> </style>
第一步:在AndroidManifest中設置啟動頁Theme
<activity android:name=".ui.SplashActivity" android:theme="@style/Theme.Splash" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
如上,我們給啟動頁設置一個全屏的背景圖片,這樣就不用顯示預設的主題顏色了。
按照以上配置,這樣就能避免白屏或者黑屏問題了。