切记,不要在你的App启动界面设置SingleTask/SingleInstance

文章讲述了在Android App中,将启动界面设置为SingleTask或SingleInstance模式会导致每次启动都回到主页的问题。作者通过排查代码和分析源码,发现移除闪屏页并设置SingleTask启动模式是问题关键。解决方案包括更改启动模式或利用singleTop与特定Flag组合实现类似效果。提醒开发者避免在启动界面使用SingleTask,以防止意外的用户体验。
摘要由CSDN通过智能技术生成

作者:伤心的猪大肠

背景

最近在做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中我主要做的修改去移除了闪屏界面,点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值