解决应用热启动能显示之前activity的问题

本文探讨了在Android应用中如何处理Activity A和B的管理,以确保从桌面重新打开应用时直接显示B。当A的launchMode设置为singleTask时,可能导致B被销毁。解决方案是移除A的launchMode设置,并在A的onCreate()中检查intent标志,若应用是从后台唤起,则finish() A,保持B在栈顶。这样可以防止activity覆盖并保持用户期望的界面状态。

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

问题:

定义activity  A,B

比如应用打开之后先显示A  ,通过某个按钮 打开B ,这时候按home键。再从桌面打开应用,我希望看到B 。

解决方法:

1.在manifest中A的 launchMode删掉。

2.在A的oncreate中加入如下逻辑。

if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
            finish()
            return
        }

这么做的原因:

1.一般人喜欢把A的launchMode定义为singleTask。这样可以避免应用重复创建activity。但是有一个弊端就是,当这个A上面显示了别的activity,比如B。如果此时你从桌面打开应用,app会删除A上面所有的activity。导致B被删掉。所以我们不能定义A的launchMode为SingleTask。

2.那我们证明避免重复创建A的实例呢,可以看上面的步骤2。  当这个intent是应用从后台唤起,显示在前台的时候,则说明此次行为为热启动。我们就把这次的activity   finish掉,这样就不会有activity覆盖在B上面了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值