无意地清除所有后台堆栈

时间:2017-02-16 18:20:08

标签: android android-intent

是否可以在不使用意图的情况下清除所有后台堆栈?

如果用户在当前活动中执行某些操作,我需要清除所有后台堆栈,因此当按下后退按钮的应用程序应该关闭时。

3 个答案:

答案 0 :(得分:3)

您可以使用FinishAffinity

来自文档:

  

完成此活动,并尝试立即完成所有活动   在当前任务中,它具有相同的亲和力。

您的Currnet活动中的

:overWrite onBackPressed()

@Override
public void onBackPressed() {
    if(condition)
        finishAffinity();  //closes application
}

需要SDK> 16

答案 1 :(得分:1)

我认为你不能只清除背堆。

  

如果有用户,我需要清除所有后台堆栈   当前活动中的某些东西,所以当后退按钮按下应用   应该关闭。

当用户在该活动中执行某项操作后,您可以将一些boolean标记变量设置为true,然后覆盖onBackPressed() 如果onBackPressed()来电true,请System.exit(0); i=1,2,..检查此标记。

答案 2 :(得分:-1)

如果您知道活动应该是您启动活动时唯一的活动,则可以使用FLAG_ACTIVITY_CLEAR_TASK。来自docs:

  

如果在传递给Context.startActivity()的Intent中设置,则此标志将为   导致任何与活动相关联的现有任务   在活动开始前清除。也就是活动   成为一个空的任务的新根,和任何旧的任务   活动结束了。这只能与。一起使用   FLAG_ACTIVITY_NEW_TASK。

在这种情况下,你应该开始这样的活动:

Intent i = new Intent(OldActivity.this, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);