Выбор ответа Middle Производительность и утечки памяти спрашивают часто обновлено
Как работает LeakCanary
Вопрос
Как LeakCanary обнаруживает утечку Activity?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: После onDestroy следит за объектом через WeakReference; не собран, снимает дамп. LeakCanary регистрирует уничтоженные Activity, фрагменты, view фрагментов, ViewModel и сервисы в ObjectWatcher через WeakReference.
Варианты ответа
- После
onDestroyследит за объектом через WeakReference; не собран, снимает дампправильный ответ - Анализирует исходный код при компиляции и ищет ссылки на Activity в статических полях
- Считает количество созданных объектов в секунду и сигналит при аномальном росте
- Перехватывает
OutOfMemoryErrorи анализирует, какие объекты занимали память
Разбор
LeakCanary регистрирует уничтоженные Activity, фрагменты, view фрагментов, ViewModel и сервисы в ObjectWatcher через WeakReference. Если через несколько секунд и после сборки мусора объект всё ещё в памяти, снимается heap dump, анализатор Shark находит кратчайший путь сильных ссылок до GC root и показывает его. Статического анализа и подсчёта объектов нет, ждать OOM не нужно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.