1

首先,简单描述一下问题的背景:

我在处理与活动生命周期一致的后台工作人员生命周期时遇到了麻烦。第一个问题是,每当配置更改(包括屏幕方向)时,都会创建一个新的活动实例,因此我不得不将我的工作人员从旧实例拉到新实例。其次,这很复杂,因为有时工作人员会显示进度对话框,有时还会显示用户必须与之交互的错误对话框。在活动实例中处理所有这些东西 - 工作人员、对话框等 - 已经变得如此复杂,以至于现在我清楚地看到这是错误的方法。

我相信,正确的做法是首先消除重新实例化。如果提供了,那么我的活动具有非常直接和简单的生命周期,并且不需要跟踪工作人员和对话。这可以通过放入android:configChanges="..."清单来实现。

现在,问题是:

鉴于该活动android:configChanges="..."包含所有可能的东西(方向、键盘和所有其他内容) -是否可以保证活动在活动时被实例化一次并且即使在后台也不会被杀死/重新创建?文档并不清楚这一点。

如果有人知道这种保证不成立的情况 - 请告诉我。最重要的是 - 如何模拟这些案例以进行测试?

我非常感谢您的回答。

PS:文档确实说“系统可以在任何时候删除您的活动,如果它愿意的话” - 但我们在这里不考虑它,因为当用户返回到新实例时,这将是一个新故事屏幕以这种方式删除了哪个活动。在这种情况下,我们将简单地从头开始,就像用户刚刚打开此屏幕一样。

4

2 回答 2

1

如果您问这个问题,您的应用程序可能已损坏。

所以——你为什么在乎?如果您无法处理重新启动的活动,那么您将遇到这样的情况:您的应用程序的进程需要在后台被杀死以获取内存并且用户稍后返回它。

如果您可以处理重新启动,那么您为什么关心可能需要重新启动活动的某些情况?

无论如何,答案是没有办法保证活动永远不会重新启动,所以不要滥用 android:configChanges 来避免这种情况。你无法阻止它,你只是让你自己不那么明显地发现你的应用程序被破坏了,但用户仍然会遇到你的错误。

如果您在处理这个问题时遇到问题,请考虑在新的支持库中使用一些最新的工具,例如片段和加载器。它们具有许多功能,使应用程序更容易处理重新启动的活动——片段可以在重新启动时保留,加载程序保持其数据加载活动等。

此外,应用程序可能需要重新启动的一系列可能原因也不是固定的。将来可以并且将来会添加新的更改,而您无法解释它们。

于 2011-05-31T16:37:52.277 回答
0

通常,当您希望某些对象在活动重新创建过程中保持不变时,您应该让它们依赖于,而不是依赖于活动,而是依赖于应用程序上下文。如果您的应用程序对象按照建议是单例的,那么让您的项目在活动生命周期中存活下来会容易得多。

这是一个如何做到这一点的例子: 如何在 Android 中声明全局变量?

于 2011-05-31T16:33:53.700 回答