2

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

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

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

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

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

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

代码中的 Android 内存泄漏

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

我发现当我从 Activity 1st -> 2nd -> 1st 开始时。第一个活动类的浅堆 = 2 和第二个活动类 = 1 当我从第一个 -> 2nd -> 1st -> 2nd 移动时……第一个活动类的浅堆 = 1 和第二个活动类 = 2。

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

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

4

2 回答 2

1

在活动中创建不需要的对象会导致内存泄漏。所以它非常重要,你应该避免创建无用的类的对象。这些将持有一些内存而不释放它。我认为这个链接将帮助你解决你的问题问题。

于 2012-05-17T10:01:58.987 回答
0

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

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

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

谢谢朋友。

于 2012-07-06T12:12:11.983 回答