同时关闭几个android活动

tee*_*yay 7 android

在我的应用程序中,您可以浏览多个活动,直到活动堆栈非常深.

我们希望每个Activity上都有一个按钮,可以直接返回主菜单 - 即从第一个弹出除了第一个活动之外的所有活动.

我把按钮放在一个View中,我可以很容易地把它放在应用程序中的每个Activity上,但是我无法弄清楚如何一举关闭几个Activity.

(如果可能的话,如果View可以计算出自己关闭多少个活动就好了 - 也就是说检测它自己的Activity有多深.)

Ste*_*ley 16

看一下intent标志FLAG_ACTIVITY_CLEAR_TOP,它表示它将目标活动带到堆栈顶部,删除其上可能已经存在的所有其他内容.因此,使用您可以添加到所有活动的按钮来启动针对主菜单的意图,并设置该标志.

从文档:

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图.

例如,考虑一个由活动组成的任务:A,B,C,D.如果D调用带有解析为活动B组件的Intent的startActivity(),则C和D将完成,B接收给定的Intent ,导致堆栈现在是:A,B.

上面示例中当前运行的活动B实例将在其onNewIntent()方法中接收您从此处开始的新意图,或者本身已完成并使用新意图重新启动.如果它已将其启动模式声明为"多个"(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建; 对于所有其他启动模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例的onNewIntent().

此启动模式也可以与FLAG_ACTIVITY_NEW_TASK结合使用:如果用于启动任务的根活动,它将把该任务的任何当前运行的实例带到前台,然后将其清除到其根状态.这在从通知管理器启动活动时尤其有用.