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

dnxp6771 7年前發布 | 6K 次閱讀 安卓開發 Android開發 移動開發

進行應用開發時,如果沒有對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啟動之前會有一段等待時間,因此不建議設置為透明窗口

 

來自:http://blog.csdn.net/dovar_66/article/details/52692593

 

 本文由用戶 dnxp6771 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!