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?
应用程序的内存增长是自然的,内存在垃圾收集器的后续遍历中被清理。在具有虚拟机和自动垃圾收集器的语言中,程序员几乎无法控制内存分配。除了造成微小的内存泄漏外,程序员几乎无法搞砸内存管理过程。
我正在使用 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 aFragment
holds a reference to itsActivity
?
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?
应用程序的内存增长是自然的,内存在垃圾收集器的后续遍历中被清理。在具有虚拟机和自动垃圾收集器的语言中,程序员几乎无法控制内存分配。除了造成微小的内存泄漏外,程序员几乎无法搞砸内存管理过程。