不要破坏 android activity 不应该在历史上
Do not destroy android activity and should not be in the history
我对 Android 和活动的转换有疑问。
我想要的是以下内容:
- MainActivity 调用 Activity B.
- Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
- MainActivity调用了ActivityB的同一个实例。(同一个实例很重要,因为ActivityB需要很长时间才能启动)
- Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
- 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...
我对 Android 和活动的转换有疑问。 我想要的是以下内容:
- MainActivity 调用 Activity B.
- Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
- MainActivity调用了ActivityB的同一个实例。(同一个实例很重要,因为ActivityB需要很长时间才能启动)
- Activity B 调用 MainActivity(例如,通过后退按钮,同一实例)
- 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...