活动的生命周期超出了其申请流程?

时间:2013-06-27 07:03:38

标签: android android-activity

我有一个主要活动,然后它开了一个新活动。通过单击主页按钮将其置于后台。如果我使用adb shell命令终止了该进程,那么我重新打开我的应用程序。

默认情况下会显示新活动,而不是从第一个活动开始。

我的问题是,活动的生命周期超出了其申请流程? 如示例所示,即使活动的应用程序进程被终止,保存的活动仍然存在。它是否正确? Android系统会在以后回收保存的活动吗?

2 个答案:

答案 0 :(得分:0)

如果您通过活动列表重新打开应用程序,它将尝试通过上次打开的活动重新启动。这是Android的“功能”,令人难以置信的烦恼(而且经常是错误的) - Android假设每个应用程序都可以在退出时将其整个状态序列化,以便以后重新打开。你需要这样做(通过onSaveInstanceState和onRestoreInstanceState),或者当你重新启动并明确启动你的主要活动时你需要抓住它。

如果您通过应用启动器重新启动,则不会发生这种情况,因为它应始终启动您指定的活动。

答案 1 :(得分:0)

Android会记住最近的任务和活动的状态。 Android可以随时终止您的应用程序进程(如果它在后台)。如果您的应用程序在后台被杀,Android会记住该任务中的活动以及它们是如何启动的(Intents)。如果用户现在返回任务(通过从最近任务列表中选择,或通过点击应用程序列表中的应用程序图标),Android将为任务创建一个新进程并重新创建< strong>堆栈顶部(即:任务发送到后台时前面的活动)。这允许用户打开应用程序,使用它,让它做其他事情,然后返回到他们中断的应用程序。

为了使其正常运行,您必须保存并恢复所有必要的状态(使用onSaveInstanceState()onRestoreInstanceState()

如果任务进入后台并且闲置(未使用)一段时间(设备制造商可以更改此值,通常值为30或60分钟),Android将重置任务。在这种情况下,如果用户返回任务,则将忽略先前保存的状态,并且用户将从头开始。但是,您可以通过在根(开始)活动上设置alwaysRetainTaskState="true"来防止这种情况发生。