我有几个简单的问题。它们都涉及一个主题,一个策略可以处理所有事情,所以我希望我把它们放在同一个主题下。
我在查找有关垃圾收集的可靠信息方面遇到了麻烦,所以如果有任何帮助,我会很感激,我想也许我并不完全理解我在MAT中读到的内容。即使你能回答1个问题,我也会非常高兴
在Android中查找内存泄漏的最佳策略是什么?最好的我可以告诉它是获取Eclipse MAT,选择一个没有收集垃圾的对象(使用支配树,或者最容易找到它的任何东西),并显示最短的合并路径到gc该对象,并找到对该对象的最远的传入引用,您可以控制并在destroy上删除该引用。这可以杀死引用,但有时对象仍然没有收集垃圾
在destroy上清空所有处理程序/ runnables / threads / listeners是不错的做法?如果我不这样做,其中一些似乎无限期地存在,有时即使我这样做。
确保线程被垃圾收集的最佳方法是什么,即使引用已被清空(它们似乎有时会留下来)?
为什么哦为什么我不能让谷歌分析跟踪器收集垃圾,即使它根本没有我的应用程序的参考。它似乎保留了对我的活动的参考,所以我认为这可能与我的GC问题有关。
谢谢!
答案 0 :(得分:1)
最好的策略是从一开始就充分了解您正在做的事情的含义,从而避免内存泄漏。例如,请参阅handling memory leaks in Java。否则,这似乎是一个很好的方法以及代码检查。您是否强制GC证明仍未收集对象?
一般来说,没有。 This article对原因有很好的解释。
不提及任何引用?遵循上述标准编码惯例。
不知道。但是你不会在整个申请过程中使用它,所以这并不重要吗?最终,Android会终止您的整个过程并回收内存。