我有一个主要活动,然后它打开了一个新活动。通过单击主页按钮将其置于后台。如果我使用 adb shell 命令终止了该进程,那么我将重新打开我的应用程序。
默认情况下会显示新活动,而不是从第一个活动开始。
我的问题是活动的生命周期超出了它的应用程序吗?如示例所示,即使活动的应用程序进程被杀死,保存的活动仍然存在。这个对吗?android系统以后会回收保存的活动吗?
我有一个主要活动,然后它打开了一个新活动。通过单击主页按钮将其置于后台。如果我使用 adb shell 命令终止了该进程,那么我将重新打开我的应用程序。
默认情况下会显示新活动,而不是从第一个活动开始。
我的问题是活动的生命周期超出了它的应用程序吗?如示例所示,即使活动的应用程序进程被杀死,保存的活动仍然存在。这个对吗?android系统以后会回收保存的活动吗?
如果您通过活动列表重新打开应用程序,它将尝试通过最后打开的活动重新启动。这是 Android 的一个“功能”,它可能令人难以置信(而且经常是错误的)——Android 假设每个应用程序在退出时都可以序列化其整个状态以供以后重新打开。您要么需要这样做(通过 onSaveInstanceState 和 onRestoreInstanceState),要么需要在重新启动并明确启动主要活动时进行捕捉。
如果您通过应用程序启动器重新启动,则不应发生这种情况,因为这应该始终启动您指定的活动。
Android 会记住最近的任务和活动的状态。Android 可以随时终止您的应用程序的进程(如果它在后台)。如果您的应用程序在后台被终止,Android 会记住任务中有哪些活动以及它们是如何启动的(意图)。如果用户现在返回到任务(通过从最近任务列表中选择,或者通过点击应用程序列表中的应用程序图标),Android 将为该任务创建一个新进程并重新创建顶部的活动堆栈的(即:当任务被发送到后台时在前面的活动)。这允许用户打开一个应用程序,使用它,让它做其他事情,然后返回到他们离开的应用程序。
为了使其正常工作,您必须保存并恢复任何必要的状态(使用onSaveInstanceState()
和onRestoreInstanceState()
.
如果某个任务进入后台并且空闲(未使用)一段时间(设备制造商可以更改此设置,通常该值为 30 或 60 分钟),Android 将重置该任务。在这种情况下,如果用户返回任务,之前保存的状态将被忽略,用户将从头开始。alwaysRetainTaskState="true"
但是,您可以通过设置根(启动)活动来防止这种情况发生。