【发布时间】:2013-10-09 13:53:10
【问题描述】:
嗨,我们在我们的 android 应用程序中遇到了一个奇怪的问题。在我们的应用程序中,当我们启动应用程序(第一个活动)时,我们将所有需要的对象/数据存储在一个公共对象(称为对象 A)中。我们将上下文本身存储在该对象中。每当我们在应用程序中需要上下文时,我们都会从对象 A 获取上下文并使用它。除以下情况外,所有情况都可以正常工作。
i) 当我们的应用程序处于后台时,我们玩了一些高端游戏。现在我们通过最小化屏幕(最近的应用程序)回到应用程序。突然应用程序崩溃了。
ii) 如果我们通过“设置”强制停止应用程序,并通过最小化屏幕返回应用程序,则会发生同样的崩溃。
在这两种情况下,对象 A 都变为 null(它可能会被 GC 删除),因此依赖于对象 A 的所有操作都会出现异常。
为什么会这样?我们如何防止GC收集对象A?我们如何处理强制停止?请给出任何想法。
【问题讨论】:
-
您不能强制 GC 或系统杀死您的进程。在这种情况下,您应该找到一种方法来序列化/反序列化您的对象。
-
这可能是您在编写 Android 应用程序时应该了解的最重要的概念。 developer.android.com/training/basics/activity-lifecycle/…
-
Android(实际上是 Dalvik)不会 GC 单个对象,除非您的应用正在运行并且没有对其的引用。我不知道这个神话是从哪里开始的。您的 app 可能会被杀死,在这种情况下,一切都要从头开始。如果需要保存状态,则使用
onPause()和/或onStop()进行序列化。请注意,onDestroy()仅在您finish()活动时才有用。顺便说一句,如果您存储的context是Activity上下文,那么您做错了。
标签: java android performance garbage-collection