Intent.FLAG_ACTIVITY_CLEAR_TOP在Android中不起作用

时间:2013-10-11 06:50:05

标签: android flags activity-stack

您好我正在开发Android应用程序,其中我有这样的活动流程A - > B - > C。

所以我的意图是,一旦B打开活动C关闭A和B.为此我试图使用2个标志:  Intent.FLAG_ACTIVITY_CLEAR_TOP and Intent.FLAG_ACTIVITY_SINGLE_TOP

但是当我点击时  回来它向我显示了活动B和A.我开始这样的活动

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(intent);

我不知道它为什么不起作用?我做错了什么?需要帮忙。谢谢。

3 个答案:

答案 0 :(得分:2)

  

public static final int FLAG_ACTIVITY_CLEAR_TOP

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

例如,考虑一个由活动组成的任务: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结合使用效果良好:如果用于启动任务的根活动,它会将当前正在运行的任务的任务带到前台,然后清除它的根状态。这在从通知管理器启动活动时尤其有用。

Intent a = new Intent(this,A.class);
        a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(a);

有关详细信息,请查看here

答案 1 :(得分:1)

我知道它有点晚了,但对于其他寻求解决方案的人来说,调用finish()就可以了。

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    finish();

答案 2 :(得分:0)

删除Intent.FLAG_ACTIVITY_SINGLE_TOP