Ответ
LeakCanary обнаруживает утечки памяти, отслеживая объекты, которые должны быть уничтожены, но остаются в памяти. Вот как это работает:
-
Отслеживание объектов – LeakCanary регистрирует
ObjectWatcher, который наблюдает за объектами (например, уничтоженными Activity/Fragment). Если объект не удаляется сборщиком мусора (GC) через 5 секунд, он считается потенциальной утечкой. -
Анализ кучи – Если утечка обнаружена, LeakCanary делает дамп кучи (Heap Dump) и анализирует его с помощью Shark (библиотека для анализа кучи). Он ищет цепочки ссылок, удерживающие объект.
-
Отчет – Показывает кратчайший путь удержания объекта (reference chain), помогая найти корень проблемы.
Пример кода для ручной проверки утечки:
val watchedObject = MyActivity()
AppWatcher.objectWatcher.watch(
watchedObject,
"MyActivity should be garbage collected"
)