是否可以在不使用意图的情况下清除所有后台堆栈?
如果用户在当前活动中执行某些操作,我需要清除所有后台堆栈,因此当按下后退按钮的应用程序应该关闭时。
答案 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);