2012-03-20 72 views
0

我有一个启动活动(A),它调用一个调用另一个活动(C)的列表视图活动(B)。 当我在活动C和我按主页,而不是杀死应用程序(或等待Android来做到这一点),而不是longpress Home并回到活动C有一个奇怪的问题: 当我点击返回时,我回到B.我有一个后退处理程序,询问用户是否要退出并在该活动中调用finish()。当我尝试在这种情况下退出时,活动A再次启动。Android活动生命周期 - 活动从历史记录中重新启动

在正常运行时,它完成B并且不回到A. 为什么?

感谢

+0

当你说“当我试图在这种情况下退出”时,“退出”是什么意思?你如何“退出”? – 2012-08-26 21:20:40

+0

通过调用finish() – 2012-08-27 03:31:43

+0

你的意思是你在ActivityB中按下后退按钮并尝试在ActvityA上调用'finish()'? – 2012-08-27 07:36:46

回答

1

当应用程序被杀死(无论是由您或Android设备)托管应用程序的过程中被杀死。但是,Android会记住活动堆栈的状态(在您的情况下为A-> B-> C)。

当用户返回到应用程序,机器人用于该应用创建一个新的过程,并重新创建仅是在活动堆栈(在这种情况下:C)的顶部的活性。现在,用户按下BACK,导致活动C完成,Android重新创建活动B的实例,然后显示(您将看到对B.onCreate()B.onStart()B.onResume()的调用)。

现在用户再次按BACK。您的后退按钮处理程序尝试在活动A上调用finish(),但没有活动A的实例.Android尚未创建它!当活动B完成时,Android会记住在B下面的活动堆栈中存在活动A的实例,因此它会重新创建活动A的实例(随后会显示)(您将看到对A.onCreate(),A.onStart()A.onResume()的调用)。

我希望这能解释你所看到的。

1

确保您呼吁的整理()当您负载B

+0

谢谢!这似乎解决了这个问题。 顺便说一句 - 就ICS而言,它甚至在不杀死应用的情况下 - 在完成()的活动B重新启动A.非常奇怪。 – 2012-03-21 10:55:14

+0

活动堆栈起初可能很复杂,需要一些时间来了解它们的力量:)如果您可以请接受一个很好的答案 – Mimminito 2012-03-21 12:55:35