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

时间:2014-04-02 17:11:46

标签: android android-studio android-intent android-activity onbackpressed

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

onBackPress(){ 
    moveTaskToBack(true);
    finish();
}

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

4 个答案:

答案 0 :(得分:6)

有一个名为finishAffinity()的方法用于完成所有活动。

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

答案 1 :(得分:3)

您需要使用FLAG_ACTIVITY_CLEAR_TOP

中的onBackPressed来调用您的活动
@Override
public void onBackPressed()
{
    Intent it = new Intent(YouCurrentActivity.this, YourFinalActivity.class);
    it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(it);
    finish();
}

希望它有帮助!

答案 2 :(得分:1)

使用清单中的noHistory标记或在用户导航时自行完成每个活动。

startActivity(myIntent);
finish();

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

答案 3 :(得分:0)

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