我的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.
答案 0 :(得分:1)
如果您在所有地方使用getApplicationContext()
,那么肯定是在泄漏记忆!这通常是一个坏主意。您需要在适当的位置使用适当的上下文。
进行堆转储,使用分析器(如MAT或jhat)并查看不应存在的实例(应该销毁的活动)。按照参考链回顾并找出它们为什么没有被回收。