在重建了我曾经写过的旧代码之后,然后忘记了,现在重写了......我把它放在这里作为所有人使用的维基: - )
所以,基本上:如果你在复杂的Android应用程序中有内存泄漏,包含图像和交叉引用。您将如何找到哪种(类型)物体泄漏? Android SDK提供了一些(非常难学和使用)工具。可能还有更多我不知道的东西。然而,Java确实提供了PhantomReference作为这样做的一种手段,即使经历了设置所需类所需的混乱也可以做很多工作(并且讨厌...... JDK-8034946)。
但这样做最简单/最有效的方法是什么?我的解决方案如下。
答案 0 :(得分:1)
LeakCanary是第三方库,可自动检测内存泄漏,添加依赖项后,您可以将以下行添加到应用程序类中:
{
"success": "no",
"error": "validation_failed",
"validation_errors": [
{"name": "too long"},
{"id": "invalid format, must be String"}
]
}
该库提供了一个很好的通知&泄漏的痕迹,你也可以定义自己的参考观察者(虽然默认的看起来工作得相当好。)
答案 1 :(得分:0)
我在一个课程中的解决方案:“MemCheck”
要监控任何对象,只需致电:
Date
这将“监控”分配的对象数量,最重要的是 - “已取消分配”。
要在任何所需时间记录泄漏,请致电:
MemCheck.add( this ); // in any class constructor
作为替代方案,设置MemCheck.periodic = 5(秒数)。 这将每5秒报告一次内存中被监视对象的数量。它还可以方便地记录已用/可用内存。
所以,MemCheck.java:
MemCheck.countAndLog();