0

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

UI Activity 启动一个 Service 并设置 2 路 AIDL 回调,以便两者可以通信。

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

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

所以我的猜测是服务以某种方式持有对活动的引用。我知道许多关于泄漏活动上下文的文章警告。服务仅通过存储在应用程序范围内的弱引用来引用活动。(扩展应用程序的类)

有什么方法可以找到具体引用活动的内容吗?支配树显示 mapTiles 和 ListView 布局占用了我所有的内存......但我找不到对保持这些东西保持活力的 Activity 的引用。

此外,如果发生 OutOfMemoryException,是否有办法转储 HPROF 堆转储?

4

2 回答 2

0

问题是当用户退出Activity时,Activity内存没有释放。

Android中没有“退出活动”。调用 finish() 或按回活动不会从内存中删除活动使用的对象。Android 本身会在未来的某个随机时间点自行解决这个问题。

如果您希望在活动完成时从内存中释放对象,则需要自己手动释放它们。

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

于 2011-01-28T00:38:40.987 回答
0

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

于 2011-01-28T00:39:04.997 回答