如何追踪内存泄漏 - 查找生活参考

时间:2011-01-28 00:32:26

标签: android service memory-leaks android-context aidl

我有一个相当复杂的应用程序 -

UI活动启动服务并设置双向AIDL回调,以便两者可以进行通信。

该服务永远运行(除非在UI活动中点击“关闭”按钮)。

问题是当用户退出Activity时,Activity内存未释放。 - 即使UI活动已关闭,我的应用程序使用的内存量也是相同的。 - 即使UI活动已经关闭,堆仍然会在其上显示mapTiles和其他UI废话。

所以我的猜测是某种程度上服务持有对Activity的引用。我知道很多关于泄露活动上下文的文章。服务仅通过存储在应用程序范围的弱引用引用活动。 (扩展应用程序的类)

有没有办法找到具体引用活动的内容?统治者树显示mapTiles和ListView布局占用我所有的记忆......但是我找不到对活动的引用,这使得这些东西保持活着。

另外,如果发生OutOfMemoryException,有没有办法转储HPROF堆转储?

2 个答案:

答案 0 :(得分:0)

  

问题是当用户退出时   活动,活动记忆不是   释放。

Android中没有“退出活动”。调用finish()或按下活动不会从活动使用的内存中删除对象。 Android本身会在将来的某个随机点处理这个问题。

如果您希望在活动完成 时将内容从 中释放,则需要自行手动释放它们。

编辑:可用于查找内存使用情况的类是ActivityManager

答案 1 :(得分:0)

如果不是你自己持有一个引用(“通过存储在应用程序范围的弱引用引用Activity”,你是否将它置空?我想知道为什么你引用服务中的活动,通常是另一种方式),你尝试过执行GC吗?只要剩余足够的内存,就不会发生gc来移走垃圾。