APP安装完成打开再返回桌面打开启动两次应用的问题

本文介绍了Android APP中出现的任务重复问题,详细解释了当从后台再次启动APP时为何会出现新任务而不是回到原有任务的现象。文章提供了具体的bug重现步骤及问题分析,并给出了解决方案,确保应用程序能够正确地在单个任务中运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bug重现步骤:
一般我们从应用市场下载App后,安装完成了点击打开,启动APP,再按Home键切换到后台,再找到APP的图标,点击启动。这时候APP不是打开之前切换到后台的APP,而是重新打开了一个任务。所以这时候退出APP,需要返回两次才能完全退出。
分析问题:
首先我们要知道,一个task并不是对应一个线程,实际上一个task可以包含多个进程, 一个Task中可能有多个同一个Activity的实例,然后这时候第一次的情况下,并不是设置launchMode就可以保证单例的,在资料上看到,这也是安卓系统的一个漏洞,但是官方也给出了对应的API来解决这个问题,但是实际上这个问题大家并未给足够多的关注,所以很多人不知道这个现象。

解决方法:
在你的应用的起始页,记住一定要是程序打开的第一个页面,在onCreate方法里,在super.onCreate(savedInstanceState)这一行代码之后,一定要在这行代码之后,插入以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (!isTaskRoot()) {
        finish();
        return;
    } else {
        setContentView(R.layout.activity_main);
    }
}

if(!isTaskRoot()),判断该Activity是不是任务空间的源Activity,“非”也就是说是被系统重新实例化出来,如果你就放在launcher Activity中话,这里可以直接return了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值