На этой странице представлена информация о поиске и выявлении утечек памяти, характерная именно для макетов на основе представлений. Основные сведения о захвате и анализе дампов кучи см. в разделе «Захват дампа кучи» .
Обнаружение утечек памяти
Чтобы быстро отфильтровать классы, которые могут быть связаны с утечками памяти, откройте раскрывающийся список классов и выберите «Показать утечки в 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заново, и если ваше приложение хранит ссылку на один из этих объектов где-то еще, система не сможет выполнить сборку мусора. - Переключайтесь между своим приложением и другим приложением, находясь в разных состояниях активности. Например, перейдите на главный экран, а затем вернитесь в свое приложение.