Выбор ответа Middle Производительность и утечки памяти спрашивают часто обновлено

Как работает LeakCanary

Вопрос

Как LeakCanary обнаруживает утечку Activity?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: После onDestroy следит за объектом через WeakReference; не собран, снимает дамп. LeakCanary регистрирует уничтоженные Activity, фрагменты, view фрагментов, ViewModel и сервисы в ObjectWatcher через WeakReference.

Варианты ответа

  1. После onDestroy следит за объектом через WeakReference; не собран, снимает дампправильный ответ
  2. Анализирует исходный код при компиляции и ищет ссылки на Activity в статических полях
  3. Считает количество созданных объектов в секунду и сигналит при аномальном росте
  4. Перехватывает OutOfMemoryError и анализирует, какие объекты занимали память

Разбор

LeakCanary регистрирует уничтоженные Activity, фрагменты, view фрагментов, ViewModel и сервисы в ObjectWatcher через WeakReference. Если через несколько секунд и после сборки мусора объект всё ещё в памяти, снимается heap dump, анализатор Shark находит кратчайший путь сильных ссылок до GC root и показывает его. Статического анализа и подсчёта объектов нет, ждать OOM не нужно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.