Android 内存泄漏的潜在原因

Potential causes of memory leaks in Android

我正在使用 leakcanery 查找 Android 中的内存泄漏。我发现并修复了所有 Activity 漏洞。 (很惊讶知道有这么多顺便说一句!)。 我还为所有 Fragment 添加了 watch refWatcher

问题 1:还有什么我应该注意的,可能会导致明显的内存泄漏吗?

问题 2: 由于 Fragment 持有对其 Activity 的引用,所以观察 Fragment 泄漏不是多余的吗?无论如何我都会收到通知,对吗? :-/

问题 3: 当我在 android studio 中检查内存监视器时,它显示内存使用量随时间增长。这是一个巨大的内存泄漏的迹象,还是 Android OS 是善意的,它只是给了我更多的内存?我怎样才能确定?

Is there anything else that I should watch that may cause a noticeable memory leak?

  • 声明成员字段 static 几乎可以保证内存泄漏。
  • 匿名 class 超过父类 class 生命周期的匿名 class ,例如 Volley Request ,也会产生内存泄漏,因为它们持有对父类的隐式引用Activity,如果 Activity 在请求调用完成之前消失,则会发生内存泄漏。

Isn't watching Fragment leaks redundant since a Fragment holds a reference to its Activity?

A Fragment 没有 "hold" 对 Activity 的引用。参考由 FragmentManager 提供。但是框架会在内部管理它,因此您无需担心。

When I check the memory monitor in android studio it shows the memory usage growth over time. Is it a sign of a giant memory leak or Android OS is kind and it is just giving me more memory? How can I find for sure?

应用程序的内存增长是自然的,内存在垃圾收集器的后续遍历中被清理。在具有虚拟机和自动垃圾收集器的语言中,程序员几乎无法控制内存分配。除了造成微小的内存泄漏外,程序员几乎无法搞砸内存管理过程。