我有一个相当复杂的应用程序 -
UI活动启动服务并设置双向AIDL回调,以便两者可以进行通信。
该服务永远运行(除非在UI活动中点击“关闭”按钮)。
问题是当用户退出Activity时,Activity内存未释放。 - 即使UI活动已关闭,我的应用程序使用的内存量也是相同的。 - 即使UI活动已经关闭,堆仍然会在其上显示mapTiles和其他UI废话。
所以我的猜测是某种程度上服务持有对Activity的引用。我知道很多关于泄露活动上下文的文章。服务仅通过存储在应用程序范围的弱引用引用活动。 (扩展应用程序的类)
有没有办法找到具体引用活动的内容?统治者树显示mapTiles和ListView布局占用我所有的记忆......但是我找不到对活动的引用,这使得这些东西保持活着。
另外,如果发生OutOfMemoryException,有没有办法转储HPROF堆转储?
答案 0 :(得分:0)
问题是当用户退出时 活动,活动记忆不是 释放。
Android中没有“退出活动”。调用finish()或按下活动不会从活动使用的内存中删除对象。 Android本身会在将来的某个随机点处理这个问题。
如果您希望在活动完成 时将内容从 中释放,则需要自行手动释放它们。
编辑:可用于查找内存使用情况的类是ActivityManager。
答案 1 :(得分:0)
如果不是你自己持有一个引用(“通过存储在应用程序范围的弱引用引用Activity”,你是否将它置空?我想知道为什么你引用服务中的活动,通常是另一种方式),你尝试过执行GC吗?只要剩余足够的内存,就不会发生gc来移走垃圾。