我对Android和活动的过渡有问题。 我想要的是以下内容:
- 主活动调用活动 B。
- 活动 B 调用主活动(例如,通过"后退"按钮,同一实例(
- MainActivity 调用活动 B 的同一实例(同一实例很重要,因为活动 B 需要很长时间才能启动(
- 活动 B 调用主活动(例如,通过"后退"按钮,同一实例(
- 按下主活动后退按钮并终止应用程序。
我尝试过:
主要活动:
android: launch mode = "single task"
开始活动 B:
Intent intent = new Intent (this, B.class);
this.startActivity (intent);
活动二:
android: launch mode = "SingleInstance"
启动主活动:
Intent callerIntent = new Intent (this, MainActivity.class);
CallerIntent.addFlags (Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
start activity (caller intent);
不幸的是,第 5 点不起作用。
我找了很久,可惜什么也没找到,也没有搜索瓶子的话。我希望有人可以帮助我。
我还有一个小型演示应用程序,您可以在其上测试行为: AndroidStudioZipFile(30天可用(
不要为此使用特殊的启动模式!
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...
步骤 5 中的行为是什么? 我认为,它将在步骤 5 之后显示活动 B,该活动仍在后台堆栈中,因为它从未被销毁或完成! 如果您不想在主活动的后按上保存任何内容,您可以调用
@Override
public void onBackPressed() {
this.finish();
System.exit(0);
}
或者您也可以尝试在主活动上按下后退时清除后堆栈! 希望这有帮助。