Android——Activity栈问题记录

        在android应用中,用户使用过程中看到的大部分界面都是Activity,这些Activity是被划分到不同的栈中进行管理的,栈中的Activity符合先进后出的原则,表现为我们在点手机Back键时,逐个界面倒退,直到最初的主界面,然后才会退出应用。

        默认情况下,不用去关注Activity的栈区分配问题,会自动由ActivityStackSupervisor来管理,但是某些场景下,对intent下的Activity跳转的要求,在默认模式下无法满足,比如,A应用的Activity1跳转到B应用的Activity2,Activity2又跳转到B应用的Activity3,此时用户按下Home键,应用转后台,此时桌面重新拉起A应用Activity1再想跳转到Activity2会发现跳转到了Activity3,类似的场景要如何处理呢?

        通过设置Activity的启动模式和规定ActivityTask栈的属性能恰当的满足这类需求。在AndroidManifest文件中设置Activity的LaunchMode,是决定了该Activity在任务栈中的位置和状态,但是在通过intent从栈A启动不同应用的activity跳转到栈B时,仅仅是设置跳转activity的launchMode并不能满足上面提到的场景需求,因为此时栈A跳转栈B会拉起之前转到后台的栈B,若是栈B此时栈顶的activity是activity3,即使activity2的launchMode是singleTask,也无法实现activity1到activity2的跳转,而是跳转到activity3了。

       我们的目标是每次点击此跳转都到acitivity2,所以可想到的方案是,每次跳转时都清空栈B中的activyt,然后重新创建activity2到栈B,完成目标跳转。

    android中可以通过设置Intent的flag来实现上面的方案,比如,在startActivty前,设置传入的intent的flag: FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_SINGLE_TOP,这样在每次跳转前就会先清空之前的任务栈,新启动一个activity到栈中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值