Создание дампа памяти (представлений)

Реализация Jetpack Compose

На этой странице представлена ​​информация о поиске и выявлении утечек памяти, характерная именно для макетов на основе представлений. Основные сведения о захвате и анализе дампов кучи см. в разделе «Захват дампа кучи» .

Обнаружение утечек памяти

Чтобы быстро отфильтровать классы, которые могут быть связаны с утечками памяти, откройте раскрывающийся список классов и выберите «Показать утечки в Activity/Fragment» . Android Studio отобразит классы, которые, по ее мнению, указывают на утечки памяти для экземпляров Activity и Fragment в вашем приложении. Фильтр отображает следующие типы данных:

  • Экземпляры Activity , которые были уничтожены, но на которые всё ещё ссылаются.
  • Экземпляры Fragment , у которых отсутствует действительный FragmentManager , но которые всё ещё используются в качестве ссылок.

Учтите, что фильтр может давать ложные срабатывания в следующих ситуациях:

  • Fragment создан, но ещё не использован.
  • Fragment кэшируется, но не как часть FragmentTransaction .

Для более тщательного поиска утечек памяти вручную просмотрите списки классов и экземпляров, чтобы найти объекты с большим значением Retained Size . Ищите утечки памяти, вызванные любой из следующих причин:

  • Долгоживущие ссылки на Activity , Context , View , Drawable и другие объекты, которые могут содержать ссылку на контейнер Activity или Context .
  • Нестатические внутренние классы, такие как Runnable , которые могут содержать экземпляр Activity .
  • Кэши, которые хранят объекты дольше, чем необходимо.

При обнаружении потенциальных утечек памяти используйте вкладки «Поля» и «Ссылки» в разделе «Подробности экземпляра» , чтобы перейти к интересующей вас строке кода или экземпляра.

Инициировать утечки памяти для тестирования

Чтобы инициировать утечки памяти для тестирования в вашем приложении, вы можете сделать это одним из следующих способов:

  • Поворачивайте устройство из портретного режима в альбомный и обратно несколько раз, находясь в разных состояниях активности. Поворот устройства часто приводит к утечке объектов Activity , Context или View , поскольку система создает Activity заново, и если ваше приложение хранит ссылку на один из этих объектов где-то еще, система не сможет выполнить сборку мусора.
  • Переключайтесь между своим приложением и другим приложением, находясь в разных состояниях активности. Например, перейдите на главный экран, а затем вернитесь в свое приложение.