【问题标题】:Is there programmatic way to know if Activity was [not] GC'ed?是否有编程方式知道 Activity 是否 [not] GC'ed?
【发布时间】:2013-10-25 15:13:02
【问题描述】:

听起来是个愚蠢的问题,但我想不出任何可能的方法。

理想情况下,我想检查 onDestroy 编辑但似乎在 RAM 中的可疑活动/服务的内存泄漏。

【问题讨论】:

  • 是的,你不能这样做。正如上面的链接所示,您需要使用 MAT。只需在不同的时间点创建堆转储。然后,您可以查看传入和传出引用以及 GC 根的路径。
  • 感谢您的建议,我一定会看看MAT。我认为 Leonidos 有一个很好的观点 - 至少我可以确认我的活动完全符合 GC 的条件,这是我主要关心的问题。

标签: android memory-leaks android-memory


【解决方案1】:

您可以为您的活动创建 WeakReference。小心,不要保留任何硬/软参考。调用 GC(例如从另一个活动)并检查引用是否为空。请记住,android 可以将活动保留在内存中以重复使用它。

您可以使用 finalize 方法进行调试。您不得在 Release 版本中使用它并删除它。

您也可以按照@Simon 的建议使用 MAT 来查看应用程序的所有对象。

【讨论】:

  • 我认为你是对的。我可以对可疑活动使用弱/幻影引用,并确认该引用是否在 System.runFinalization() 之后排队,这意味着我没有其他强引用对我的活动。
  • 好吧,根据this ...WeakReferences are enqueued as soon as the object to which they point becomes weakly reachable 我猜我什至不需要依赖System.runFinalization。我会在适当尝试后立即接受您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多