不要破坏 android activity 不应该在历史上

Do not destroy android activity and should not be in the history

我对 Android 和活动的转换有疑问。 我想要的是以下内容:

  1. MainActivity 调用 Activity B.
  2. Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
  3. MainActivity调用了ActivityB的同一个实例。(同一个实例很重要,因为ActivityB需要很长时间才能启动)
  4. Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
  5. MainActivity 按下后退按钮并终止应用程序。

我尝试了什么:

主要Activity:

android: launch mode = "single task"

开始Activity B:

Intent intent = new Intent (this, B.class);
this.startActivity (intent);

Activity乙:

android: launch mode = "SingleInstance"

启动主程序Activity:

Intent callerIntent = new Intent (this, MainActivity.class);
CallerIntent.addFlags (Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
start activity (caller intent);

很遗憾,第 5 点不起作用。

找了好久,可惜一无所获,还是找瓶词。我希望有人能帮助我。

我还有一个小型演示应用程序,您可以在上面测试行为: AndroidStudioZipFile(可用 30 天)

第 5 步的行为是什么? 我认为,它将在第 5 步之后显示 Activity B,它仍然在后台,因为它从未被破坏或完成! 如果你不想在返回 MainActivity 时保存任何内容,你可以调用

@Override
public void onBackPressed() {
    this.finish();
    System.exit(0);
}

或者您也可以尝试在 MainActivity 上按下返回时清除返回堆栈! 希望这有帮助。

不要为此使用特殊的启动模式!

MainActivity 应该这样调用 ActivityB

Intent intent = new Intent(this. ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

ActivityB 应该这样调用 MainActivity

Intent intent = new Intent(this. MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这将允许您在 2 个活动之间来回切换,而无需创建任何新实例。您需要在一项或两项活动中覆盖 onBackPressed()

如果你想让MainActivity中的返回按钮退出应用程序,你需要有点技巧。一个简单的方法如下:

像这样在 MainActivity 中声明一个静态变量:

public static boolean exit = false;

MainActivity.onBackPressed() 中,执​​行以下操作:

exit = true;
super.onBackPressed();

这将导致 MainActivity 完成。如果 MainActivity 是唯一活跃的 Activity,那么您就完成了。但是,ActivityB 可能在 MainActivity 下方。要强制 ActivityB 在这种情况下完成,请将此添加到 ActivityB.onResume():

super.onResume();
if (MainActivity.exit) {
    finish();
    return;
}
// Rest of onResume() code goes here...