后退按钮不会切换到上一个活动,但会退出Android应用

时间:2012-03-24 14:00:46

标签: android

我有一个包含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>

3 个答案:

答案 0 :(得分:1)

在您的活动中覆盖后退按钮并执行您想要的任何处理..

@Override
public void onBackPressed() {
    //Do whatever you want here on back button press
}

但是在你的情况下,如果A2仅通过startActivityFroResult()从 启动,那么A1必须始终保持在活动堆栈跟踪中。按下后应始终返回A1。除非由于不活动/高使用率而导致android os清理你的A1活动的罕见情况。

答案 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}}。