Android中内存泄漏的潜在原因

时间:2015-05-25 05:25:00

标签: java android memory-leaks garbage-collection

我使用leakcanery在Android中查找内存泄漏。我发现并修复了所有Activity泄漏。 (惊讶地知道有那么多BTW!)。 我还为所有refWatcher添加了观看Fragment

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

问题2:由于Fragment拥有对其Fragment的引用,因此无法查看Activity泄漏是多余的?我收到了通知,对吗? : - /

问题3:当我检查android studio中的内存监视器时,它显示了内存使用量随时间的增长。这是一个巨大的内存泄漏的迹象还是Android操作系统是善良的,它只是给了我更多的内存?我怎么能找到肯定的?

1 个答案:

答案 0 :(得分:5)

  

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

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

由于Fragment拥有对其Fragment的引用而未查看Activity泄漏是多余的?

Fragment没有"持有"对Activity的引用。该引用由FragmentManager提供。但是框架在内部管理这个,所以你不必担心它。

  

当我检查android studio中的内存监视器时,它显示内存使用量随时间的增长。这是一个巨大的内存泄漏的迹象还是Android操作系统是善良的,它只是给了我更多的内存?我怎么能找到肯定的?

应用程序的内存增长是自然的,并且在随后的垃圾收集器传递中清理内存。在具有虚拟机和自动垃圾收集器的语言中,程序员几乎无法控制内存分配。除了创建微小的内存泄漏之外,程序员几乎无法搞砸内存管理过程。