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



我的安卓应用漏了,我应该检查什么?

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

我在 DDMS 日食透视图中监视堆大小:当我第一次启动应用程序时,分配了 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.

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

进行堆转储,使用探查器(如 MAT 或 jhat)并查看不应该存在的实例(应该销毁的活动)。沿着引用链返回,找出为什么它们没有被回收。

最新更新