清除堆栈,包括不同任务中的活动

时间:2011-12-22 07:07:46

标签: android android-intent task

我有一个主要活动A.有两种情况

1)A发射B.     B有launchmode singleTask,并使用FLAG_ACTIVITY_NEW_TASK启动。     现在我在B中有一个菜单选项,它执行删除操作并启动活动A.

2)A启动B,它启动C它还包含执行delet opereation的菜单选项。

我希望A开始在两个场景中清除堆栈,但属于另一个任务的活动仍然存在于那里 我被困了是否有办法清理堆栈。

4 个答案:

答案 0 :(得分:1)

尝试在B和C活动的删除操作上使用以下代码

    Intent intent=new Intent(B.this, A.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

答案 1 :(得分:0)

如果我谈论你的第二个场景,那么FLAG_ACTIVITY_TOP_CLEAR将清除堆栈..

现在,您的筹码将仅为A而不是A-B-C-A

并且在第二种情况下AFAIU你的问题你只有两个活动A和B所以如果你想重新启动A然后重新启动A手动完成B。

希望你有一些技巧。

如果你有launchmode=SingleTask的活动,那么你可以使用flag_activity_brought_to_front。

That will act like 

A-B-c到A

答案 2 :(得分:0)

为什么不在再次呼叫A之前完成B和C?

finish();

答案 3 :(得分:0)

我的方法无法达到您的目标A to be started with clearing the stack,但当用户选择delet opereation并再次从A开始B时,将重置包含A和B的任务。

当您首次从A开始活动B时,使用标记FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标记任务将在需要时清除,然后如果用户从B或C中选择delet opereation菜单项,则设置标记,所以下次从A(A应该是清单中的single_task启动模式),你使用标志FLAG_ACTIVITY_RESET_TASK_IF_NEEDED来启动B.这个标志将清除B和B的所有顶部。

希望这会对你有所帮助:)。