按下后退按钮时如何删除堆栈中的所有活动
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_TASK
和 FLAG_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
【讨论】:
以上是关于按下后退按钮时如何删除堆栈中的所有活动的主要内容,如果未能解决你的问题,请参考以下文章