2011-01-21 83 views
1

我有几个简单的问题。他们都处理1个主题,一个策略可能会处理所有事情,所以我希望我能把它们放在同一个主题下。一般Android内存泄漏,特别是谷歌分析跟踪

我在查找垃圾收集的可靠信息时遇到了困难,所以如果有任何帮助,我想我可能并不完全了解我在MAT中读到的内容。即使你可以回答1个问题,我也会非常高兴

  1. 什么是寻找Android内存泄漏的最佳策略?尽我所能说的是获取Eclipse MAT,挑选一个没有被垃圾收集的对象(使用dominator树或任何最容易找到它的对象),并显示最短的合并路径到gc找到对象的最远传入引用,您可以控制并摧毁该引用。这可以杀死引用,但有时候对象仍然不会被垃圾回收。

  2. 是不是所有的处理程序/ runnables/threads/listener都会被销毁?如果我不这样做的话,其中一些似乎无限期地停留下来,有时甚至我会这样做。

  3. 确保线程获取垃圾的最好方法是什么,即使引用没有被引用(它们似乎有时会停留)?

  4. 为什么哦为什么我不能让谷歌分析跟踪器得到垃圾回收,尽管它根本没有来自我的应用程序的参考。它似乎保持对我的活动的参考,所以我认为这可能与我的GC问题有关。

谢谢!

回答

1
  1. 最好的策略是充分理解你从一开始就在做什么的含义,从而避免内存泄漏。参见例如handling memory leaks in Java。否则,这似乎是一个很好的方法以及代码检查。你是否强迫GC证明该对象仍然不被收集?

  2. 一般来说,没有。对于为什么,This article有一个很好的解释。

  3. 不要持有任何引用它?遵循上述标准编码实践。

  4. 不知道。但是你不会在整个应用程序中使用它,所以它并不重要?最终,Android会杀死你的整个过程并回收内存。

+0

感谢您的提示。将浏览这两篇文章。是的,我强迫gc,摆脱对象的引用。我认为,使用线程和处理程序,我必须使它们成为静态和用户更弱的引用。 – 2011-01-21 21:37:39