一尘不染

如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?

java

我已经阅读了有关使用此功能的几篇文章,但一定会丢失一些东西,因为它对我不起作用。我的活动A在清单中有launchmode =“ singleTop”。它以launchmode =“ singleInstance”启动活动B。活动B打开浏览器并接收并返回意图,这就是为什么它是singleInstance的原因。我试图覆盖“后退”按钮,以便将用户发送回活动A,然后可以按“上一步”离开活动,而不是再次返回活动B。

// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
  && keyCode == KeyEvent.KEYCODE_BACK
  && event.getRepeatCount() == 0) onBackPressed();
 return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
 startActivity(new Intent(this, UI.class)
 .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
 return;
}

从浏览器返回后,堆栈为… A,B,Browser,B

我希望此代码将堆栈更改为… A …,以便再次按回可将用户带回到主屏幕。

相反,似乎将堆栈更改为… A,B,Browser,B,A …,好像这些标志不存在。

我尝试在startActivity之后在活动B中调用finish(),但是后退按钮再次将我带回到浏览器!


阅读 628

收藏
2020-03-16

共1个答案

一尘不染

@bitestar具有正确的解决方案,但还有一个步骤:

它已隐藏在文档中,但是你必须将的更改launchMode为以外的Activity任何其他值standard。否则,它将被销毁并重新创建,而不是重置到顶部。

2020-03-16