我正在使用 leakcanery
来查找 Android 中的内存泄漏。我发现并修复了所有 Activity
漏洞。 (很惊讶知道有这么多顺便说一句!)。
我还为我所有的 Fragment
添加了 watch refWatcher
。
问题 1:还有什么我应该注意的,可能会导致明显的内存泄漏吗?
问题 2: 是不是观察 Fragment
泄漏是多余的,因为 Fragment
持有对其 Activity
的引用?无论如何我都会收到通知,对吗? :-/
问题 3: 当我在 android studio 中检查内存监视器时,它显示内存使用量随时间增长。这是一个巨大的内存泄漏的迹象,还是 Android 操作系统很好,它只是给我更多的内存?我怎样才能确定?
最佳答案
Is there anything else that I should watch that may cause a noticeable memory leak?
- 声明成员字段
static
几乎可以保证内存泄漏。 - 超出父类生命周期的匿名类,例如 Volley
Request
,也会产生内存泄漏,因为它们持有对父类Activity
的隐式引用,并且如果Activity
在请求调用完成之前消失,则会发生内存泄漏。
Isn't watching
Fragment
leaks redundant since aFragment
holds a reference to itsActivity
?
Fragment
不“持有”对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?
应用程序的内存增长是自然的,内存会在垃圾收集器的后续传递中被清理。在具有虚拟机和自动垃圾收集器的语言中,程序员几乎无法控制内存分配。除了造成微小的内存泄漏外,程序员几乎无法搞砸内存管理过程。
关于java - Android内存泄漏的潜在原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30431718/