在安卓中,我們的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>