<分区>
您好,我们的 Android 应用程序遇到了一个奇怪的问题。在我们的应用程序中,当我们启动应用程序(第一个 Activity )时,我们将所有需要的对象/数据存储在一个公共(public)对象(称为对象 A)中。我们将上下文本身存储在该对象中。每当我们在应用程序中需要上下文时,我们都会从对象 A 获取上下文并使用它。除以下情况外,所有情况均正常工作。
i) 当我们的应用程序处于后台时,我们玩了一些高端游戏。现在我们通过最小化的屏幕(最近的应用程序)返回到应用程序。突然应用程序崩溃了。
ii) 如果我们确实通过“设置”强制停止应用,然后通过最小化屏幕返回应用,同样的崩溃会发生。
在这两种情况下,对象 A 都变为空(它可能会被 GC 删除),因此所有依赖于对象 A 的操作都会出现异常。
为什么会这样?我们如何防止GC收集对象A?我们如何处理强行停止?请给出任何想法。
Why is it happening?
其他应用程序也需要内存才能运行。假设 Android 会无限期地将您的数据保存在内存中是不合理的。
How do we prevent GC from collecting object A?
不要。为您的问题找到不同的解决方案。
How can we deal with the force stop? Please give any ideas.
最后,决定权在您,但这里有一些常见的选项:
- 当存储的数据不再存在时,将其视为应用程序的全新启动。将用户带到着陆页并让他开始新游戏。
- 保存数据。根据您存储的内容,SharedPreferences 或 SQLite 可能是不错的选择。参见 Storage Options了解您的存储选项摘要。
第二个选项显然不适用于您的 Context,但无论如何我可能会为 Context 设计一个不同的解决方案。