您好我正在开发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);
我不知道它为什么不起作用?我做错了什么?需要帮忙。谢谢。
答案 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