我的Android应用程序泄漏,我应该检查什么?

时间:2012-06-19 14:23:26

标签: android android-layout memory-leaks

我的Android应用程序漏洞了,我应该检查什么?

我看了一下avoiding memory leaks并在活动的onDestroy()方法中添加了一些unbindDrawables()调用来清理但没有改变。我还用getApplicationContext()替换每个getContext()调用,但是没有任何改变。

我在DDMS eclipse透视图中监控堆大小:当我第一次启动应用程序时,3Mb已经分配,​​在10次关闭/重启后,它已经分配了10Mb。

我的观点主要由ViewFlippers和许多从LinearLayout的子类继承的嵌套Layout组成。

编辑:

运行MAT以确定泄漏嫌疑人的主要问题是:

16 instances of "org.apache.http.impl.conn.tsccm.ConnPoolByRoute", 
loaded by "<system class loader>" occupy 4,000,328 (44.08%) bytes.

1 个答案:

答案 0 :(得分:1)

如果您在所有地方使用getApplicationContext(),那么肯定是在泄漏记忆!这通常是一个坏主意。您需要在适当的位置使用适当的上下文。

进行堆转储,使用分析器(如MAT或jhat)并查看不应存在的实例(应该销毁的活动)。按照参考链回顾并找出它们为什么没有被回收。