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

4
这是一个场景: Activity A -> Activity B -> Activity C -> Activity D。我想在启动Activity D后销毁Activity AActivity BActivity C。有什么建议吗?

Intent i = new Intent(FirstActivity.this, NextActivity.class); startActivity(i); //使用finish()方法关闭当前活动 FirstActivity.this.finish(); - impathuri
3个回答

23
Intent intent = new Intent(ActivityC.this, ActivityD.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

FLAG_ACTIVITY_NEW_TASK

如果设置了此标志,该活动将成为此历史堆栈上新任务的起点。任务(从启动它的活动到下一个任务活动)定义了用户可以移动到的原子活动组。任务可以移到前台和后台;特定任务内的所有活动始终保持相同的顺序。有关任务的更多信息,请参阅任务和返回堆栈。

此标志通常由希望呈现“启动器”样式行为的活动使用:它们向用户提供了可完全独立于启动它们的活动运行的单独事物列表。

当使用此标志时,如果针对现在正在启动的活动已经运行了任务,则不会启动新的活动; 相反,当前任务将简单地带到屏幕的最前面,并显示其上次处于的状态。请参阅FLAG_ACTIVITY_MULTIPLE_TASK以获取禁用此行为的标志。

当调用者要求从被启动的活动中获得结果时,不能使用此标志。

FLAG_ACTIVITY_CLEAR_TASK

如果在传递给Context.startActivity()的Intent中设置了此标志,则会在启动Activity之前清除与该Activity关联的任何现有任务。也就是说,Activity成为否则为空的任务的新根,任何旧活动都将被关闭。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。


如果您清除所有活动,则不需要 ActivityC.this.finish(); - user924

3
您需要在Intent中传递标志Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent intent = new Intent(getApplicationContext(), D.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

当我已经在Activity C时,我调用了以下代码:Intent intent = new Intent(getApplicationContext(), D.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 但是当我按返回按钮时,仍然会回到Activity C。不过还是谢谢您的回答。 - JayVDiyk
是的,您可以转到活动C,但您的活动A、B将会结束。 - Pitty
在您的Activity D OnCreate()方法中使用:Activity_C activity = new Activity_C(); activity.finish(); - Pitty

3
使用以下代码在启动Activity C时清除Activity堆栈:
 Intent i = new Intent(PresentActivityName.this, D.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(i);
    finish();

如果您清除所有活动,则不需要 ActivityC.this.finish(); - user924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接