1

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

我看了一下避免内存泄漏,并在活动的 onDestroy() 方法中添加了一些 unbindDrawables() 调用以进行清理,但没有任何改变。我还用 getApplicationContext() 替换了每个 getContext() 调用,但也没有任何改变。

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

我的视图主要由 ViewFlippers 和许多继承自 LinearLayout 子类的嵌套布局组成。

编辑:

运行 MAT 以识别泄漏嫌疑人后,主要问题是:

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

1 回答 1

1

如果您在getApplicationContext()整个地方都在使用,那么您肯定会泄漏内存!这通常是个坏主意。您需要在适当的地方使用适当的上下文。

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

于 2012-06-19T15:09:56.440 回答