Intent.FLAG_ACTIVITY_CLEAR_TOP在Android中不起作用

嗨,我正在开发android应用程序,其中有活动流,例如A-> B-> C.

因此,我的意图是,一旦B打开活动C,就同时关闭A和B.为此,我尝试使用2个标志:
 Intent.FLAG_ACTIVITY_CLEAR_TOP和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);

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

解决方法:

public static final int FLAG_ACTIVITY_CLEAR_TOP

如果已设置,并且正在启动的活动已在当前任务中运行,那么与其启动该活动的新实例,不如关闭该活动之上的所有其他活动,并将此Intent传递给(现在顶部)将旧活动作为新的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

上一篇:Redis 命令执行过程(上)


下一篇:趣谈Linux操作系统学习笔记:第二十九讲