【问题标题】:Memory Analyzer Tool - Android内存分析器工具 - Android
【发布时间】:2012-05-17 09:17:53
【问题描述】:

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

类名 |对象 |浅堆 |保留堆

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

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

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

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

Android Memoryleak in code

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

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

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

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

【问题讨论】:

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

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    谢谢朋友。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2012-04-25
      • 2011-10-15
      相关资源
      最近更新 更多