首先,简要说明问题的背景:
我遇到了根据Activity生命周期处理后台工作者生命周期的麻烦。第一个问题是,只要配置发生变化(包括屏幕方向),就会创建一个新的活动实例,因此我不得不将我的工作人员从旧实例拉到新实例。其次,由于有时工人显示进度对话框,并且偶尔他们显示用户必须与之交互的错误对话框,因此这很复杂。处理活动实例中的所有内容 - 工作者,对话框等 - 变得非常复杂,现在我清楚地看到这是错误的方法。
我认为,正确的方法是首先消除重新实例化。如果提供了那些,那么我的活动具有非常简单和简单的生命周期,无需跟踪工作人员和对话框。这可以通过将android:configChanges="..."
放入清单中来实现。
鉴于活动有android:configChanges="..."
,其中包括所有可能的东西(方向,键盘和其他所有东西) - 可以保证活动在活着时实例化一次而不会被杀死/重新生成 - 甚至在后台创建?关于这一点,文档并不清楚。
如果有人知道此类担保无法解决的情况,请告知我们。最重要的是 - 如何模拟这些案例以对其进行测试?
我非常感谢你的回答。
PS:说什么文件说“系统可以在任何时候删除你的活动” - 但我们在这里不考虑它,因为这将成为新实例的新故事用户返回到屏幕,这种活动被删除了。在这种情况下,我们只需从头开始就像用户刚刚打开此屏幕一样。
答案 0 :(得分:1)
如果您这样问,您的应用可能已损坏。
所以 - 你为什么关心?如果您无法处理正在重新启动的活动,那么您将在后台恢复应用程序的进程以获取内存并且用户稍后返回它的情况。
如果您可以处理重启,为什么还要关注可能存在需要重新启动活动的情况?
无论如何,答案是没有办法保证活动永远不会重启,所以不要滥用android:configChanges来试图避免这种情况。你不能阻止它,你只是让自己不那么明显你的应用程序坏了,但用户仍然会遇到你的错误。
如果您在处理此问题时遇到问题,请考虑在新的支持库中使用最近的一些设施,如片段和加载器。它们具有许多功能,使应用程序可以更轻松地处理重新启动的活动 - 可以在重新启动时保留片段,加载器可以保持其数据加载活动等等。
此外,还可能需要重新启动应用程序的一组可能原因。将来可以并且将会添加新的更改,您无法对其进行说明。
答案 1 :(得分:0)
通常,当您希望某些对象保持活动娱乐时,您应该让它们依赖于活动,而不是依赖于应用程序上下文。如果你的应用程序对象(如推荐的那样)是一个单例,那么让你的项目在活动生命周期中生存就会容易得多。
以下是如何做到这一点的例子: How to declare global variables in Android?