再見二丁目 | yitimo的个人博客

再见二丁目

Android中移除除了首页的历史Activity

发布于: 2018-09-10 09:18

此文章久未修订,请自行甄别内容准确性。

对于Android中Activity栈的操作提及比较多的是在Intent中使用这几个Flag:

其中一个使用情景是,当用户的登录状态过期后,需要清除历史纪录直接重定向到登录页,也就是当前打开页面为A -> B -> C时,发现登录已过期需要跳转到D,就需要:

val intent = Intent(Context, D)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

这样跳转到D后整个应用只会留下D页面。

但是靠这几个Flag做不到一件事,就是本文标题所描述的,如何从A -> B -> C想要跳转到D时得到A -> D这样的页面栈,即在跳转到新页面时移除除了首页外的其他页面,得到从新页面返回时直接是回到首页的效果。

此需求的使用场景之一就是在购物下单流程中,用户选择完商品并下单后,原先的商品或购物车页面已经不再需要,甚至如果不清除掉这些页面,当用户从订单页返回时又会回到下单前的状态,已经完成购买的商品,数量都还留在页面里。

最终对笔者起到帮助的只有这个链接

上面的链接让笔者最终决定使用的做法是:当从C跳转到D时,添加参数putExtra("clear_top", true),并在DonBackPressed()中判断此参数,若为true则使用上文提及的方式清除所有页面并跳转到首页,否则正常执行返回流程。此方法没有使用上文提及的几个Flag,或者说笔者没发现这几个Flag有达到此效果的能力。