我想完成我的应用程序,使用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();
}
答案 0 :(得分:6)
来自javadoc:
如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,此Intent将是作为新的意图传递到(现在在顶部)旧活动。
CLEAR_TOP将清除所有活动 ABOVE Activity1
:如果Activity2
低于Activity1
,则Activity1
完成后,您会看到{{1} }}
答案 1 :(得分:1)
您确定在Activity1中正确调用了finish()
吗?我感觉不是,因为:
if
语句在您的Activity中的位置。它应该在onNewIntent
。if
方法中发出onNewIntent
声明,则仍然错误。 docs指定getIntent()
将始终返回启动活动的原始意图,除非您致电setIntent()
。总而言之,也许在您的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
,那么它将被完成并重新创建。