2

据我了解,不能指望单例在 Android 应用程序中保存持久数据,因为应用程序可能会在应用程序的“表观生命周期”中多次被破坏和重新创建。这本身对我来说不是问题。问题在于当应用程序经历这个销毁 - > 创建过程时究竟会发生什么。

我在论坛上读到该应用程序将在一个新进程中重新创建,并且我认为具有所有内存管理的旧进程将被销毁。然而,这是否意味着由开发人员来清理所有单例和逻辑树,其中的节点持有相互引用?还是进程的破坏会自动清理所有内容?我不是一个经验丰富的 Java 开发人员,所以我对 GC 仍有很多不清楚的地方。

我正在处理的特定项目在设备正常运行期间仅运行一个应用程序。在桌面方面,不会有通过单例的内存泄漏的危险,因为应用程序只会在设备关闭时关闭,并且始终处于同一个进程中。然而,Android 让它变得更加困难。

在旁注中,使用模拟器的 Android 内存泄漏检测器是什么?

4

1 回答 1

3

基本上你必须避免一直引用 UI 元素。UI 元素绑定到可能被破坏的活动的上下文。

如果你真的需要一个单例而不是扩展Application类来执行它。当活动关闭或旋转等时,此实例不会被销毁。

您还应该知道您可以在代码中处理这些事件。这意味着您的活动不得重新启动。恕我直言,重新启动一个活动几乎没有任何意义。要实现这一点,您需要将该configChanges属性添加到清单中。我个人使用这个配置:

<activity android:configChanges="orientation|screenSize|keyboardHidden" ...>
于 2013-03-24T11:02:46.273 回答