这是方案
Activity A
- > Activity B
- > Activity C
- > Activity D
(我希望在Activity D
启动后销毁活动A,B和C.
有什么想法吗?
答案 0 :(得分:15)
Intent intent = new Intent(ActivityC.this, ActivityD.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
ActivityC.this.finish();
FLAG_ACTIVITY_NEW_TASK
如果设置,此活动将成为此任务的新任务的开始 历史堆栈。任务(从启动它到下一个的活动 任务活动)定义用户可以进行的活动的原子组 搬去。任务可以移动到前台和后台;所有的 特定任务内部的活动始终保持不变 订购。有关任务的详细信息,请参阅任务和后台堆栈。
此标志通常由想要呈现的活动使用 "发射器"样式行为:它们为用户提供单独的列表 可以完成的事情,否则完全独立运行 启动它们的活动。
使用此标志时,如果某个任务已在运行该活动 你现在开始,然后一个新的活动将不会开始; 相反,当前的任务将被简单地带到前面 屏幕显示它的最后状态。请参阅FLAG_ACTIVITY_MULTIPLE_TASK 用于禁用此行为的标志。
当呼叫者请求结果时,不能使用此标志 正在推出的活动。
<强> FLAG_ACTIVITY_CLEAR_TASK 强>
如果在传递给Context.startActivity()的Intent中设置,则此标志将为 导致任何与活动相关联的现有任务 在活动开始前清除。也就是活动 成为一个空的任务的新根,和任何旧的任务 活动结束了。这只能与。一起使用 FLAG_ACTIVITY_NEW_TASK。
答案 1 :(得分:2)
您需要将Intent.FLAG_ACTIVITY_CLEAR_TOP
标记为Intent
:
Intent intent = new Intent(getApplicationContext(), D.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 2 :(得分:1)
启动活动C时,使用以下行清除活动堆栈:
Intent i = new Intent(PresentActivityName.this, D.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish();