【问题标题】: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 按钮时清除所有堆栈。有什么建议 ?非常感谢 !
【问题讨论】:
标签:
android
android-studio
android-intent
android-activity
onbackpressed
【解决方案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