特定活动打开后销毁所有以前的活动

时间:2015-12-30 07:54:50

标签: android android-activity

这是方案

Activity A - > Activity B - > Activity C - > Activity D(我希望在Activity D启动后销毁活动A,B和C.

有什么想法吗?

3 个答案:

答案 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();