Для выявления утечек памяти в Android-проекте используются следующие основные инструменты и методы:
Android Studio Profiler. Встроенный инструмент для мониторинга использования памяти, ЦП, сети и энергии. Позволяет посмотреть график использования памяти в реальном времени и сделать дамп кучи (heap dump).
Heap Dump Analysis. Анализ дампа кучи (.hprof файл) позволяет увидеть, какие объекты занимают больше всего памяти и есть ли объекты, которые должны быть освобождены сборщиком мусора, но на них остались сильные ссылки.
Memory Snapshot Comparison. Сравнение двух дампов кучи, снятых в разное время, помогает выявить объекты, количество которых аномально растет, что может указывать на утечку.
LeakCanary. Популярная сторонняя библиотека, которая автоматически обнаруживает утечки памяти в отладочных сборках приложения и отображает их в виде уведомлений. Значительно упрощает поиск утечек.
Добавление зависимости в build.gradle:
gradle
StrictMode. Режим разработчика, который помогает выявлять операции, выполняемые в основном потоке (например, чтение с диска или сетевые запросы), а также утечки объектов (например, Activity, Service).
Пример использования StrictMode для обнаружения утечек Activity:
java
Анализ кода. Ручной анализ кода, особенно в местах, где используются контексты, слушатели (listeners), асинхронные задачи или статические переменные, которые могут хранить ссылки на объекты, срок жизни которых должен быть короче.
Тесты. Написание unit- и instrumentation тестов, которые могут воспроизводить сценарии, потенциально вызывающие утечки, и проверять наличие утечек программно.
Каждый из методов имеет свои преимущества и недостатки, и часто наиболее эффективным подходом является комбинирование нескольких инструментов. Например, LeakCanary быстро показывает потенциальные утечки, а Android Studio Profiler с анализом дампа кучи помогает понять корневую причину и масштаб утечки.