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