内存分析工具 - Android

时间:2012-05-17 09:17:54

标签: android memory-leaks eclipse-memory-analyzer

我修复了我的应用程序活动中的窗口泄漏。但是,当我在android - Histogram View中使用Memory Analyzer Tool测试应用程序时,我发现了2个我的活动实例。

班级名称|对象|浅堆|保留堆

MATDemoActivity。 | | |
com.pace.mat.MATDemoActivity | 2 | 368 |

总计:1个条目(2,195个已过滤)| | |

由于没有内存泄漏,它怎么可能是2个对象?请帮助我理解MAT结果中的数据....提前致谢

请在此链接中找到完整的代码和相关讨论。

Android Memoryleak in code

=================

我发现当我从活动1开始 - >第二 - > 1。第1活动类的浅堆= 2,第2活动类= 1,当我从第1活动时移动 - >第二 - >第1 - >第二...第一活动类的浅堆= 1,第二活动类= 2.

所以我尝试了启动模式。我为所有活动设置了android:launchMode =“singleTask”。现在两个活动的浅堆等于我导航到页面的次数。但是,由于在此启动模式下不允许多个实例,为什么我没有将浅堆对象计数为1?

请分享您的想法,这将有助于我更好地理解这一点。

2 个答案:

答案 0 :(得分:1)

在活动中创建不需要的对象会导致内存泄漏。因此,您应该避免创建没有用的类对象。这些将保留一些内存而不释放它。我认为{{3}将帮助您解决问题。

答案 1 :(得分:0)

在android中,我们可以使用Memory Analyzer工具捕获特定代码中的内存泄漏(如果有)。我们应该在执行负责泄漏的操作之前和完成操作之后生成堆转储。比较这两个转储并找出哪些对象占用内存以及为什么它不是垃圾回收。

在我上面提到的情况下,我没有分析转到第二个活动后生成的转储,我试图比较活动前后的转储。我清楚地得到了所需的结果。

另外,关于MAT工具,最好不止一次尝试并比较转储并选择转储进行分析。

谢谢朋友们。