按下后退按钮时如何删除堆栈中的所有活动

Posted

技术标签:

【中文标题】按下后退按钮时如何删除堆栈中的所有活动【英文标题】:How to remove all activity in Stack when press back button 【发布时间】:2014-05-14 03:33:31 【问题描述】:

我有一个活动列表 A - B -C -D - E 等等,例如最终活动是 K。当我按下 BACK 按钮时,我想清除堆栈中的所有这些活动。我能怎么做 ?事实上,我超车了

onBackPress() 
    moveTaskToBack(true);
    finish();

但只有当前活动被删除并且应用程序退出。然后,我返回应用程序,它在 K 之前恢复活动。我希望它在我重新打开应用程序时从头开始。我认为这里的原因是因为堆栈中的活动列表仍然被存储,所以我想在单击 BACK 按钮时清除所有堆栈。有什么建议 ?非常感谢 !

【问题讨论】:

【参考方案1】:

有一个方法叫做finishAffinity()来完成所有的活动。

public void onBackPressed()
  super.onBackPressed();
  this.finishAffinity();

【讨论】:

【参考方案2】:

您需要使用onBackPressed 中的FLAG_ACTIVITY_CLEAR_TOP 调用您的活动

@Override
public void onBackPressed()

    Intent it = new Intent(YouCurrentActivity.this, YourFinalActivity.class);
    it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(it);
    finish();

希望对你有帮助!

【讨论】:

【参考方案3】:

要么在清单中使用noHistory 标志,要么在用户离开时自己完成每个活动。

startActivity(myIntent);
finish();

另一种解决方案,也许是最好的,如果你有这么多覆盖Activities:只使用一个Activity 并处理Fragments 中的内容。这样您就可以控制用户点击后退按钮时想要显示的内容。

【讨论】:

【参考方案4】:

API 级别 11 或更高级别中,在 Intent 上使用 FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK 标志来清除所有活动堆栈。 将此代码添加到您的 onBackPressed() 方法中,

> This launch mode can also be used to

配合效果好 FLAG_ACTIVITY_NEW_TASK:如果用于 启动任务的根活动,它 将带来任何当前正在运行的 该任务的实例 前景,然后将其清除到其 根状态。这个特别好用 例如,当启动一个 通知中的活动 经理。

因此,您启动 B 的代码将是:

Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent);
finish(); // call this to finish the current activity

【讨论】:

以上是关于按下后退按钮时如何删除堆栈中的所有活动的主要内容,如果未能解决你的问题,请参考以下文章

当我按下后退按钮 Swift 3 时,删除的数据重新出现

Android:如何在按下按钮时关闭一个活动并在按下另一个按钮时关闭整个后台堆栈? [复制]

android插入活动堆栈

在父活动上按下后退按钮

按下后退按钮时如何退出?

如何摆脱Android应用栏中的后退按钮