2011-06-16 54 views
0

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

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

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

在活性2

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); 

在活动1

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

回答

1

您确定finish()在Activity1中被正确调用?我得到的感觉不是,因为:

  1. 我不确定if声明在您的活动中的内容。它应该在onNewIntent
  2. 如果您在onNewIntent方法内制作if声明,那么它的仍然是错误。 docs指定getIntent()将始终返回启动活动的原始意图,除非您致电setIntent()

总结一下,也许别的什么东西在你的Activity1中调用(不能说全部代码没有),它会启动Activity2而不是完成。

如果我描述的不是这种情况,并且您的活动堆栈确实看起来像Activity2> Activity1,就像其他人描述的那样,它不起作用。请在Activity2中拨打finish()

+0

是的,它'调用,并且系统回到Android菜单正确。但它重新启动并进入Activity2 ... – jul 2011-06-16 08:08:26

+0

您是对的,在完成启动Activity2的Activity1后调用了其他内容。我认为调用'finish()'后没有执行代码。谢谢。 – jul 2011-06-16 08:20:56

+0

GUT FEELING FTW – Felix 2011-06-16 08:25:57

6

根据JavaDoc:

如果设置,以及正在启动的活动在目前的任务已经运行,则代替启动该活动的一个新实例,其上的所有其他活动都将被关闭,并且此Intent将被传递给(现在位于最上面的)旧活动作为一个新的意图。

CLEAR_TOP将消灭所有活动以上Activity1:如果Activity2低于Activity1那么一旦Activity1结束,你会看到Activity2

+0

UpVote从javadoc的解释 – ingsaurabh 2011-06-16 08:02:04

+0

这不是,我有Activity2>(更多活动)> Activity1 – jul 2011-06-16 08:04:22

0

根据the docs

如果设置,以及正在启动的活动已经在当前任务在它之上运行,则代替开展该活动的一个新实例,所有其他活动的将被关闭,并且这个意图将作为新的意图被传递到(现在在顶部)旧的活动。

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

0

你说得没错,但你是否捕捉到你的第一个活动的onNewIntent方法的意图?活动1之后还应启动活动2以使其发挥作用。

0

从意向DOC:

public static final int FLAG_ACTIVITY_CLEAR_TOP 

如果已宣布其推出模式为“多”(默认值),您没有设置FLAG_ACTIVITY_SINGLE_TOP的目的相同,那么将完成并重新创建。

相关问题