消滅黑白屏,實現android app“快速啟動”
阿新 • • 發佈:2018-11-10
進行應用開發時,如果沒有對app的啟動頁做處理,那我們的app冷啟動時就會出現一個白屏或者黑屏的過程,正是這個黑白屏過程的存在會讓使用者感覺app啟動速度慢,本篇部落格中所說的“快速啟動“”也正是針對這個過程進行優化以達到沒有黑白屏的過程;
關於app的冷啟動:
冷啟動是指在程序未建立時,使用者從launcher點選圖示啟動app的過程。在此過程中,系統需要為app建立一個程序,程序的建立和初始化是耗時的。
我們都知道activity的繪製也是需要時間的,所以android系統框架設計了一個叫做startWindow的視窗,在activity的window繪製完成之前,讓startWindow顯示在我們的手機螢幕上,直到activity準備完成再顯示activity,前面說的黑白屏其實也就是我們app的SplashActivity繪製完成前的startWindow。
而startWindow的background與我們要啟動的activity的主題中windowBackground是一樣的,所以一切就變得很簡單了:首先自定義theme,splashActivity一般也都是一張全屏顯示的大圖或者廣告viewpager
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/splash01</item>//這裡的圖片設定為splashActivity全屏顯示的第一張圖片另外加上將狀態列全透明化:<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
values-v21
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionBar">false</item> <itemvalues-v19name="windowNoTitle">true</item> <item name="android:windowBackground">@drawable/splash01</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@android:color/transparent</item>//狀態列顏色設定為透明 </style>
<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowBackground">@drawable/splash01</item> <item name="android:windowTranslucentStatus">true</item>//透明狀態列 </style>然後將自定義的主題應用給對應的activity就好了。
有一點需要注意:
<item name="android:windowIsTranslucent">true</item>//設定activity的window為透明視窗
如果加入上面一句程式碼將Window設定為了透明,在桌面點選啟動圖示時由於繪製的startWindow是全透明的,會導致表現出app啟動之前會有一段等待時間,因此不建議設定為透明視窗