Android 避免APP啓動閃黑屏、避免啓動卡頓

Android 避免APP啓動閃黑屏的解決辦法[轉]

https://www.jianshu.com/p/18227fd891f1

轉載,備忘~

96 wdroid 關注

2018.03.09 23:50* 字數 800 閱讀 1499評論 0喜歡 0

概述

當系統啓動一個APP時,zygote進程會首先創建一個新的進程去運行這個APP,但是進程的創建是需要時間的,在創建完成之前,界面是呈現假死狀態,因爲用戶會以爲沒有點到APP而再次點擊,這極大的降低用戶體驗,谷歌做出反饋去避免這段迷之尷尬。於是系統根據你的manifest文件設置的主題顏色的不同來展示一個白屏或者黑屏。而這個黑(白)屏正式的稱呼應該是Preview Window,即預覽窗口。所以,下面我們就來聊聊這個問題的解決方案。

解決方案

既然決定解決這個問題,那麼從哪裏入手呢,Android在選擇展示黑屏或者白屏的時候,是根據你設定的主題而不同的,也就是說,雖然你的代碼沒有被執行,你的配置文件卻被提前讀取了,用來作爲展示Preview Window界面的依據。
所以,我們的解決方案的切入口就是整個APP的manifest文件,更確切的說應該是主題配置文件。

方案一 :開歷史倒車

這個方案就是禁止加載Preview Window,具體做法如下:

<style name="APPTheme"
    parent="@android:style/Theme.Holo.NoActionBar">
   <item name="android:windowDisablePreview">true</item>
</style>

將APPTheme設定爲啓動的Activity的主題,即可禁止Preview Window,當然,也有人通過把preview window設置爲全透明,也達成了類似的效果。
結果就是,當你點擊APP時,界面會無響應一段時間,然後進入APP。
我個人強烈不推薦這麼做,因爲Android想方設法提升的用戶體驗一下子被你打回解放前。

方案二:自定義Preview Window

具體方法如下:

<style name="APPTheme" parent="@android:style/Theme.Holo.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_icon</item>
</style>

同樣將主題設置到啓動的Activity的主題中,windowBackground就是即將展示的preview window。其中splash_icon可以是一整張圖片,網上很多小夥伴也都是這麼做的。其實它也可以是一個能解析出圖片資源的XML文件,好像只有layer-list這種能做得到,因爲它能夠將多個drawable疊加起來展示。

<?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/white"/>
<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/qq"/>
</item>
</layer-list>

這樣設置之後,當你點擊APP,會立馬進入你配置的界面,然後啓動歡迎頁;
好了,啓動頁做到這個份兒上,應該就可以交貨了,不過還有一個小問題需要大家注意的,那就是我們給Preview Window設置的背景圖如果不做處理,圖片就會一直存在於內存中,所以,當我們進入到歡迎頁的時候,不要忘了把背景圖設置爲空:

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    //將window的背景圖設置爲空
    getWindow().setBackgroundDrawable(null);
    super.onCreate(savedInstanceState);
}

需要注意的是有些手機標題欄和狀態欄也會影響這兩圖層的,造成抖動效果,爲了避免這種情況需要這歡迎頁面設置爲如下:

 <style name="GuideTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/windowbackground</item>
    <item name="android:windowFullscreen">true</item>
    <item name="windowNoTitle">true</item>
</style>

到這裏,關於Android啓動頁的相關問題就都講完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章