Android活动生命周期和单例和相互引用持久性(内存泄漏)

时间:2013-03-24 11:00:06

标签: android memory-leaks singleton lifecycle data-persistence

据我所知,不能指望单身人士在Android应用程序中持有持久性数据,因为应用程序可能会在应用程序的“明显生命周期”中被破坏并重新创建几次。这本身对我来说不是问题。问题出现在应用程序经历此销毁时究竟发生了什么 - >创造过程。

我已经在论坛上看到应用程序将在新进程中重新创建,并且我认为旧进程及其所有内存管理都将被破坏。但是,这是否意味着开发人员需要使用保持相互引用的节点来清理所有单例和逻辑树?或者过程的破坏是否会自动清除所有内容?我不是一个经验丰富的Java开发人员,因此对我来说还不清楚GC。

我正在处理的特定项目在整个设备正常运行时间内只运行一个应用程序。在桌面术语中,由于应用程序仅在设备关闭时关闭并且在整个过程中同时存在,因此不存在通过单例泄漏内存的危险。 Android却让它变得更加困难。

另一方面,使用模拟器的Android有什么好的内存泄漏检测器吗?

1 个答案:

答案 0 :(得分:3)

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

如果你真的需要一个singelton而不是扩展Application类来强制执行。当活动关闭或轮换等时,不会销毁此实例。

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

<activity android:configChanges="orientation|screenSize|keyboardHidden" ...>