使用Intent.FLAG_ACTIVITY_CLEAR_TOP调用的活动问题

时间:2011-06-16 07:43:16

标签: android exit

我想完成我的应用程序,使用Intent.FLAG_ACTIVITY_CLEAR_TOP调用第一个活动并完成它。但是,当它完成后,应用程序会自动重启,直接进入活动2。

为什么呢?完成使用Intent.FLAG_ACTIVITY_CLEAR_TOP调用的活动后,活动堆栈是否应为空?

我的堆栈是Activity2>(更多活动)> Activity1。

在Activity2中

Intent exit_intent=new Intent(context, Activity1.class);
exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
exit_intent.putExtra("EXIT", true);
context.startActivity(exit_intent);

在Activity1中

if (getIntent().getBooleanExtra("EXIT", false)) {           
    finish();
}

5 个答案:

答案 0 :(得分:6)

来自javadoc:

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

CLEAR_TOP将清除所有活动 ABOVE Activity1:如果Activity2低于Activity1,则Activity1完成后,您会看到{{1} }}

答案 1 :(得分:1)

您确定在Activity1中正确调用了finish()吗?我感觉不是,因为:

  1. 我不确定if语句在您的Activity中的位置。它应该在onNewIntent
  2. 如果您在if方法中发出onNewIntent声明,则仍然错误。 docs指定getIntent()将始终返回启动活动的原始意图,除非您致电setIntent()
  3. 总而言之,也许在您的Activity1中调用了其他东西(没有完整代码就无法分辨),它启动了Activity2而不是完成。

    如果我描述的不是这种情况,并且您的活动堆栈确实看起来像Activity2> Activity1和其他人一样描述了是的,它不会起作用。只需在Activity2中调用finish()

答案 2 :(得分:0)

根据the docs

  

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

因此,它不会清除整个活动堆栈,只会清除正在启动的旧活动实例之上的任何其他活动。

答案 3 :(得分:0)

你说得对,但是你是否在第一个活动的onNewIntent方法中捕获了意图?还应在活动1之后启动活动2,以使其发挥作用。

答案 4 :(得分:0)

来自Intent doc:

public static final int FLAG_ACTIVITY_CLEAR_TOP 

如果它已将其启动模式声明为“多个”(默认值),并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建。