2012-06-19 132 views
1

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

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

我监测DDMS日食角度堆大小:当我启动应用程序,第一次有3MB的分配和后10关闭/重新启动还有的10Mb的分配。

我的看法主要是由从LinearLayout中的一个子类继承ViewFlippers和许多嵌套布局。

编辑:

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

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

回答

1

如果您使用getApplicationContext()所有的地方然后确保你正在泄漏内存!这通常是一个坏主意。你需要在适当的地方使用适当的上下文。

采取堆转储,使用一个分析器(MAT一样或与jHat),并期待在不应该在那里(活动应该已被破坏)的情况下。按照参考链回来,找出为什么他们没有得到回收。

+0

好是什么意思呢? “尝试使用背景的应用,而不是上下文活动” – Alexis

+0

如果你使用,你应该使用活动场景则是因为应用程序上下文应只用于“长期”的对象,你会泄漏内存的应用程序上下文。没有规定说,如果你有4MB的HTTP连接池,那么也许你没有正确关闭您的HTTP连接,以腾出资源(缓冲区)“如果您使用的应用程序上下文,你不会泄漏内存” –

+0

。到处检查您使用http连接是否正确关闭连接。 –

相关问题