天天看點

解決安卓App啟動頁面會閃一下

在安卓中,我們的App都會獨享一個Liunx虛拟機,我們啟動一個app也類似與你的手機開啟啟動一樣,App的運作環境需要有一個加載過程,這個加載過程頁面,我們安卓開發人員就稱它為App的啟動頁面。

一般的安卓啟動頁面都會有一個啟動動畫,設定一個公司目前正在推廣的廣告網頁,這個廣告網頁一般由背景接口提供連結和顯示時長。這樣,我們就可以通過背景控制來展示不同的活動啟動頁面。

測試人員突然提了一個優化問題,當我們的程式退出到背景之後,再次啟動的時候在啟動頁面會有一個閃動的一瞬間。經過檢視衆多的App,發現這個閃動是不正常現象,是以我們來分析一下這個閃動的原因。

首先,我們會在AndroidManifest檔案裡面配置:

<!--閃屏-->
        <activity
            android:name=".activity.SplashActivity"
            android:screenOrientation="portrait"
            android:theme="@style/LauncherTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
           

這裡辨別我們的App點選啟動首先打開的頁面,一般我們都取名為SplashActivity。

/**
 * 啟動頁面
 */
class SplashActivity : UmengSplashMessageActivity() {

    override fun onCustomPretreatment(): Boolean {
        val mInAppMessageManager = InAppMessageManager.getInstance(this)
        //設定應用内消息為Debug模式
        mInAppMessageManager.setInAppMsgDebugMode(false)
        //跳轉Activity的完整包路徑
        if (ObjectUtils.isEmpty(TokenManager.getInstance().token)) {
            mInAppMessageManager.setMainActivityPath(ConstantExtra.MAIN_WELCOME)
        } else {
            mInAppMessageManager.setMainActivityPath(ConstantExtra.MAIN_STUDENT)
        }
        return super.onCustomPretreatment()
    }
}
           

這裡我們的啟動頁面是繼承了友盟第三方的啟動頁面。這裡就判斷了使用者的Token,然後進行跳轉到不同的頁面。

是以我們定位到我們是通過設定Activity的主題進行設定背景圖檔的:

<!--啟動頁-->
    <style name="LauncherTheme" parent="android:Theme.NoTitleBar.Fullscreen">
        <item name="android:windowBackground">@drawable/ic_splash_bg</item>
        <item name="android:windowAnimationStyle">@style/ActivitySwitchAnimation</item>
    </style>
           
<!-- 隐現進入進出動畫 -->
    <style name="ActivitySwitchAnimation">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
           
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@interpolator/decelerate_quad"
        android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_longAnimTime" />

<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@interpolator/accelerate_quad" 
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="@android:integer/config_mediumAnimTime" 
/>
           

會閃一下是因為我們了一個慢慢顯示的動畫導緻的,這個動畫效果也不是很友好,從黑到白導緻的,如果要解決這個閃動的問題,我們就隻需要設定一個圖檔,不需要動畫就行了。

去掉主題的啟動動畫:

<item name="android:windowAnimationStyle">@style/ActivitySwitchAnimation</item>