【问题标题】:what are LIBRARY LEAKS in leakcanary?Leakcanary 中的 LIBRARY LEAKS 是什么?
【发布时间】:2020-03-02 14:56:41
【问题描述】:

在leakcanary 中,有时我将泄漏报告为“库泄漏”

 HEAP ANALYSIS RESULT
    ====================================
    0 APPLICATION LEAKS

    References underlined with "~~~" are likely causes.
    Learn more at https://squ.re/leaks.
    ====================================
    1 LIBRARY LEAKS

    Library Leaks are leaks coming from the Android Framework or Google libraries.

    Leak pattern: instance field android.view.ViewGroup$ViewLocationHolder#mRoot
    Description: In Android P, ViewLocationHolder has an mRoot field that is not cleared in its clear() method. Introduced in https://github.com/aosp-mirror/platform_frameworks_base/commit/86b326012813f09d8f1de7d6d26c986a909d Bug report: https://issuetracker.google.com/issues/112792715
    66264 bytes retained by leaking objects
    Signature: 64becd25d6156daa91df6572a75b6a28ddb1
    ┬───
    │ GC Root: System class

在泄漏的网站上它说:

LibraryLeak at leakcanary website

图书馆泄漏

数据类 LibraryLeak :Leak

HeapAnalyzer 发现的泄漏,这是泄漏的唯一路径 对象需要通过与模式匹配的引用,如 提供给 LibraryLeakReferenceMatcher 实例。这是一个已知的 库代码泄漏,超出您的控制范围。

真的是我无法控制的吗?

可能是我做了什么导致它?

有什么办法可以预防吗?

leakcanry 有时会放置一个链接来报告此内存泄漏,但我没有看到任何响应,这是 android 正常工作的东西吗?如果是,这些问题通常如何解决以及如何跟踪?

如果我确实无法解决或阻止它,有没有办法让leakcanary 忽略LIBRARY LEAKS?

【问题讨论】:

    标签: android memory-leaks leakcanary


    【解决方案1】:

    这是一个很好的问题,事实上这应该被更好地记录,所以我创建了一个问题来跟踪它:https://github.com/square/leakcanary/issues/1773

    真的是我无法控制的吗?

    是和不是。通常这意味着泄漏不是由代码中的错误或错误使用 API 引起的,而是由 Android X 或 Android SDK 中的错误引起的。话虽如此,它并不总是超出您的控制范围,可能会有一些技巧/黑客来解决泄漏问题。

    可能是我做了什么导致它?

    Android P 中的 ViewLocationHolder 是一个不幸的错误,在您使用视图时会发生。所以,是的,你并没有真正做任何特别的事情。

    有什么办法可以预防吗?

    可能,但还没有人想出一个明确的破解方法来解决它。

    leakcanry 有时会放置一个链接来报告此内存泄漏,但我没有看到任何响应,这是 android 正常工作的东西吗?如果是,这些问题通常如何解决以及如何跟踪?

    不知道你在这里的意思。如果您的意思是错误报告 (https://issuetracker.google.com/issues/112792715) 的链接停止工作,那是因为 Google 决定阻止访问。

    如果我确实无法解决或阻止它,有没有办法让leakcanary 忽略LIBRARY LEAKS?

    LeakCanary 无法在转储堆和进行分析之前知道泄漏是否是库泄漏。通知开发人员分析已完成很重要(即使它只发现库泄漏而没有发现应用程序泄漏),否则他们会想知道分析发生了什么。

    【讨论】:

    • 感谢您的详细回答,非常有帮助。我花了很多时间想我做错了什么。回想起来,我学到了很多东西,但我觉得如果记录得更清楚,我可以节省很多时间。
    • 这里是文档更新:github.com/square/leakcanary/pull/1785
    • 酷!谢谢你。我建议leakCanary 在泄漏报告中添加指向此类帖子的链接。我相信它会帮助像我这样的新手:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 2014-11-02
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多