我有一个包含2个活动的应用:A1和A2。当我运行应用程序时,它会打开A1活动。然后按下按钮打开A2(我使用startActivityForResult(intent,0))。然后,如果我按Back,它将返回A1。一切都很好。
但如果我在A2活动中并且切换到另一个应用程序然后返回到我的应用程序,那么我按下Back并且应用程序退出而不是切换到A1活动。 我该怎么做才能防止这种情况发生?
从A1调用A2的代码:
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), A2.class);
startActivityForResult(intent, 0);
}
AndroidManifest.xml中的声明:
<activity
android:name="A1"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity>
<activity
android:name="A2"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity>
答案 0 :(得分:1)
在您的活动中覆盖后退按钮并执行您想要的任何处理..
@Override
public void onBackPressed() {
//Do whatever you want here on back button press
}
但是在你的情况下,如果A2仅通过startActivityFroResult()从 启动
答案 1 :(得分:1)
当您通过意图调用A2时,是否正在调用this.finish();
或finish();
标记?
您还可以使用onPause()
和onResume()
方法。如果OP中没有提供任何代码,答案将基于猜测。如果我猜错了,请纠正。 : - )
另外,使用一些代码更新OP。而且,您还可以阅读Activity's Life Cycle。
编辑:问题似乎与此处的问题类似:Android is killing my application whenever startactivityforresult is called。同样,它归结为保存活动状态,这是活动生命周期的一部分。
答案 2 :(得分:0)
尝试将清单中的singleInstance
更改为singleTask
。使用singleInstance
,Android不会在您的任务中启动任何新实例(即活动后台堆栈),这意味着如果操作系统破坏了根活动,它将不会调用A1的onCreate
来重新创建它
详细信息位于Tasks and Back Stack document下的"Defining Launch Modes"。
请注意,一旦A1被销毁,您将失去其所有状态,因此您可能希望实施onSaveInstanceState
,这将允许您保存将在Bundle
中传递给您的onCreate
{1}}。