如何清除任务的后台堆栈并只留下新的活动?

Elk*_*awy 6 android

我想在开始新的Activity意图时清除backstack.

我的问题的具体情况如下:我有这样的活动A> B> C> D> E"A"是注册活动,"B"是确认注册活动.我希望当用户启动活动"B"时他不能再回到活动"A",当用户达到活动"C"时,活动"A"和"B"都没用,我不需要用户再回到他们身边了.

此外,当用户从"C"移动到活动"D"时,他可以回到"C"但是如果他进一步移动到"E"活动,他就不能回到之前的任何"C"或"D" "活动.

经过大量的研究,我得到的最好的是使用flag:FLAG_ACTIVITY_NO_HISTORY,但它对我的情况有两个问题:

  1. 在活动"A",如果用户离开我的应用程序(例如到主屏幕),它会破坏该活动,因此用户输入的所有信息都将丢失!
  2. 活动"C"如果用户导航到"D"活动但是当用户移动到"E"活动时,我想将其保留在历史记录(backstack)中我想要删除它.

到目前为止我找不到这个问题的解决方案,我认为如果有什么东西可以清除当前任务的后台,那会更容易!

我的最低SDK支持是5.

提前致谢.

kle*_*erg 8

如果您使用的是11级或更高级别的API,则可以在意图上添加FLAG_ACTIVITY_CLEAR_TASK,这将清除任务中的所有其他活动.

否则,这可能会有所帮助: 清除较旧SDK上的完整Android活动堆栈(缺少FLAG_ACTIVITY_CLEAR_TASK)

另一种方法是让您完成不再希望用户返回的活动.例如,如果在移动到B之前调用ActivityA.finish(),则活动将从任务中删除.

当您启动活动D时,您可以使用C中的startActivityForResult()启动它,当您关闭D时,将结果发送到C,然后在导航到E之前完成活动C.