ЧТО ТАКОЕ БИБЛИОТЕКА УТЕЧИ в утечке? - PullRequest
1 голос
/ 02 марта 2020

в утечках данных иногда я получаю сообщения об утечках, сообщаемые как "утечки библиотек"

 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

класс данных LibraryLeak: Leak

Утечка обнаружена HeapAnalyzer, где требуется единственный путь к утечке объекта, проходящий через ссылку, сопоставленную с шаблоном, как это предусмотрено в экземпляр LibraryLeakReferenceMatcher. Это известная утечка в коде библиотеки, которая находится вне вашего контроля.

это действительно вне моего контроля?

Могу ли я что-то сделать, чтобы вызвать это?

Могу ли я что-нибудь сделать, чтобы предотвратить это?

leakcanry иногда помещает ссылку, чтобы сообщить об этой утечке памяти, но я не вижу никакого ответа, это то, что android нормально работает на? если да, то как такие проблемы обычно решаются и как их отслеживать?

, если действительно я ничего не могу сделать, чтобы решить или предотвратить это, есть ли способ, с помощью которого я могу попросить leakcanary игнорировать LIBRARY LEAKS?

1 Ответ

3 голосов
/ 13 марта 2020

Это отличный вопрос, и на самом деле это должно быть лучше задокументировано, поэтому я создал проблему для отслеживания: https://github.com/square/leakcanary/issues/1773

действительно ли это вне моего контроля ?

Да и нет. Как правило, это означает, что утечка не вызвана ошибкой в ​​вашем коде или неправильным использованием API, а вызвана ошибкой либо в Android X, либо в Android SDK. Это, как говорится, не всегда вне вашего контроля, могут быть уловки / хаки, чтобы обойти утечки.

Может быть, я что-то сделал, чтобы вызвать это?

ViewLocationHolder в Android P - это печальная ошибка, которая возникает ... когда вы используете представления. Так что да, вы действительно ничего особенного не сделали.

Могу ли я что-нибудь сделать, чтобы предотвратить это?

Потенциально, но никто не придумал ясного хак, чтобы обойти это.

leakcanry иногда помещает ссылку, чтобы сообщить об этой утечке памяти, но я не вижу никакого ответа, это то, над чем android обычно работает? если да, то как такие проблемы обычно решаются и как их отслеживать?

Не уверен, что вы имеете в виду здесь. Если вы имеете в виду, что ссылка на отчет об ошибке (https://issuetracker.google.com/issues/112792715) перестала работать, да, это потому, что Google решил запретить доступ.

, если действительно нет ничего, что я могу сделать Чтобы решить или предотвратить это, есть ли способ, с помощью которого я могу попросить утечку информации игнорировать УТЕЧКИ БИБЛИОТЕКИ?

У LeakCanary нет никакого способа узнать, является ли утечка утечкой библиотеки или нет, прежде чем выгрузить кучу и делать анализ. Важно уведомить разработчиков о том, что анализ выполнен (даже если обнаружена только утечка библиотеки и утечка приложения), потому что в противном случае им будет интересно, что случилось с анализом.

...