作者:伤心的猪大肠
背景
最近在做App的启动优化,为了达到快速启动的效果,将我们的App的闪屏页(SplashActivity显示固定图片)移除掉,换成MainActivity的背景(windowBackground),最后再替换成App的主题,给用户快速响应的体验。
<style name="AppWelcomeTheme" parent="BaseAppTheme">
<item name="android:windowBackground">@drawable/flash_bg</item>
</style>
//flash_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#fff" />
</shape>
</item>
<!--底层使用蓝色填充色-->
<item
android:gravity="center"
android:top="60dp">
<bitmap
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/ic_splash_logo" />
</item>
</layer-list>
AndroidManifest.xml
<activity
android:name=".ui.main.MainActivity"
android:theme="@style/AppWelcomeTheme"
这样一个 MainActivity 启动的时候,就会先显示一个预览窗口,给用户快速响应的体验。当 activity想要恢复原来 theme,可以通过在调用super.onCreate() 和setContentView()之前调用 setTheme(R.style.AppTheme),如下:
public class MyMainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Make sure this is before calling super.onCreate
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
// ...
}
}
但是却优化出了问题,我们的MainActivity使用的启动模式是SingleTask,我将闪屏页去掉后,无论打开多少页面,将应用推至后台再启动就回到了主页(MainActivity),这是个很严重的问题,还好发现的及时。
问题排查
排查问题的时候,先看看之前的版本有没有该问题(并没有发现问题),再查看我的代码提交记录,发现AndroidManifest.xml中我主要做的修改去移除了闪屏界面,点