4

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

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

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

4

4 回答 4

6

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

public void onBackPressed(){
  super.onBackPressed();
  this.finishAffinity();}
于 2016-01-02T05:16:02.510 回答
5

您需要在您的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();
}

希望能帮助到你!

于 2014-04-02T17:19:00.523 回答
2

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

startActivity(myIntent);
finish();

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

于 2014-04-02T17:18:24.863 回答
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
于 2016-01-02T05:21:26.013 回答