java - 对象变为空

标签 java android performance garbage-collection

<分区>

您好,我们的 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 设计一个不同的解决方案。

关于java - 对象变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19274063/

相关文章:

android - Flowable 的两个序列没有到达 toList()

java - Android 数据库连接

java - 在 p 元素 Selenium/java xpath 中获取文本

Java 布局管理器

android - 适用于 Android 的 Crashlytics : Disable automatic upload of mapping file via Gradle build

c# - 堆叠使用语句与单独使用语句

c# - 如何模拟硬件来测量 .net 应用程序性能?

java - 如何在java中测试http和https服务器的可用性

Java Hibernate 在失败时不会回滚事务,因为数据库中有重复的键

java - 以下代码会有性能差异吗?