1. 程式人生 > >消滅黑白屏,實現android app“快速啟動”

消滅黑白屏,實現android app“快速啟動”

進行應用開發時,如果沒有對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>
    <item 
name="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>
values-v19

<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啟動之前會有一段等待時間,因此不建議設定為透明視窗