Android 應用啓動時優化白屏問題

一般情況下 我們在啓動APP的時候,屏幕會出現一段時間的白屏或者黑屏,不同的設備可能白屏黑屏顯示的時間長短不同,設備硬件較差的時間都會比較長,這顯然影響用戶體驗。現在我們來分析這個問題產生的原因。
當我們在啓動一個應用時,系統會去檢查是否已經這樣存在一個進程,如果沒有則表示系統對應用進行冷啓動,系統和APP本身都有很多工作需要處理。首先系統的服務會先檢查startActivity中的intent的信息,然後在去創建進程,最後纔是執行啓動Acitivy的操作。而我們上面提到的顯示白黑屏的問題,就是在這段時間內產生的。
系統在繪製頁面加載佈局之前,首先會初始化窗口(Window),而在進行這步操作時,系統會根據我們設置的Theme來指定它的Theme主題顏色。Window佈局的頂層是DecorView,StartingWindow顯示一個空DecorView,我們在Style中的設置就決定了顯示的是白屏還是黑屏。

解決方法
瞭解上面的原因後,既然黑白屏是更具我們設置的Theme來決定了,那我們就可以直接從啓動頁的Theme入手,解決這個問題。

1.在AndroidManifest文件中設置:

        <activity
            android:name=".SplashActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.MyAppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

2.在styles文件中定義:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:textCursorDrawable">@drawable/cursor</item>
        <item name="android:listDivider">@drawable/recycler_divider_bg</item>

    </style>

    <style name="Theme.MyAppTheme" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@drawable/launchimage</item>
        <item name="android:windowFullscreen">true</item>
    </style>

如上,我們給啓動頁設置一個全屏的背景圖片,這樣就不用顯示默認的主題顏色了。
按照以上配置,這樣就能避免白屏問題了。

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