Для обеспечения плавной, стабильной и энергоэффективной работы приложения необходимо выявлять и устранять распространенные узкие места в производительности, касающиеся стабильности, отрисовки пользовательского интерфейса, потребления памяти, фоновой работы, задержки запуска и оптимизации сборки.
В этом разделе представлены руководства, объясняющие базовое поведение платформы Android для каждого типа проблем и пошагово описывающие, как диагностировать, профилировать и устранять их с помощью таких инструментов, как Android Studio Profiler, Perfetto, Logcat и ApplicationExitInfo .
Стабильность
- ANR : Диагностика и устранение ошибок «Приложение не отвечает» (ANR), вызванных блокировкой потоков пользовательского интерфейса, операциями ввода-вывода основного потока, конфликтами блокировок или медленной работой широковещательных приемников.
- Сбои : Прочитывайте трассировки стека, анализируйте вывод Logcat и предотвращайте необработанные исключения и сигналы от собственных систем.
Рендеринг и запуск
- Медленная отрисовка : Выявление и устранение пропущенных или зависших кадров пользовательского интерфейса (
>16msи>700ms), вызванных ресурсоемкими операциями компоновки, проходами привязки или задержками основного потока. - Медленные сессии (только игры) : Измерьте частоту кадров с помощью
SurfaceFlingerи оптимизируйте частоту кадров в играх, используя Android Frame Pacing (Swappy), Vulkan и Android Dynamic Performance Framework (ADPF). - Время запуска приложения : понимание внутренних механизмов холодного, теплого и горячего запуска, измерение времени до первоначального отображения (TTID) и времени до полного отображения (TTFD), а также оптимизация процесса запуска.
Управление памятью
- Механизмы, блокирующие использование памяти (LMK) : разберитесь, как демон Android Low Memory Killer (
lmkd) определяет приоритеты процессов с помощьюoom_adj_scoreи профилирует объем используемой памяти в Android Studio, Unity и Unreal Engine. - Использование памяти (анонимный RSS + файл подкачки) : Измерьте и уменьшите размер анонимного набора резидентных файлов (RSS) и размер файла подкачки вашего приложения в фоновом, служебном и служебном режимах.
- Использование памяти для растровых изображений : Диагностика чрезмерного размера или утечек памяти для растровых изображений и освобождение графических буферов при перемещении компонентов пользовательского интерфейса в фоновый режим.
Работа с батареей и фоновые процессы
- Чрезмерное количество блокировок пробуждения : Избегайте длительного удержания частичных блокировок пробуждения и перенесите фоновые задачи в
WorkManagerилиJobScheduler. - Зависшие частичные блокировки пробуждения : Убедитесь, что каждая полученная частичная блокировка пробуждения корректно освобождается на всех путях выполнения и обработки ошибок.
- Чрезмерное количество пробуждений : уменьшите количество точных пробуждений по будильнику и объединяйте или откладывайте запланированные фоновые задачи.
- Чрезмерное фоновое сканирование Wi-Fi : минимизируйте частоту фонового сканирования Wi-Fi и используйте пассивные или пакетные API для определения местоположения и подключения.
- Чрезмерное использование сети в фоновом режиме : пакетная обработка и отсрочка фоновых передач данных в мобильной сети с использованием ограничений
WorkManager. - Чрезмерное потребление заряда батареи : Диагностика высокого расхода заряда батареи на мобильных устройствах и устройствах Wear OS путем анализа активности процессора, датчиков и радиомодуля.
Оптимизация прав доступа и сборки
- Отказ в предоставлении доступа : Запрашивайте разрешения во время выполнения в контексте и четко объясняйте пользователям обоснование предоставления разрешений.
- Оптимизация кода DEX : настройте правила сжатия, обфускации и оптимизации R8 для уменьшения размера DEX и повышения производительности во время выполнения.
Для обеспечения плавной, стабильной и энергоэффективной работы приложения необходимо выявлять и устранять распространенные узкие места в производительности, касающиеся стабильности, отрисовки пользовательского интерфейса, потребления памяти, фоновой работы, задержки запуска и оптимизации сборки.
В этом разделе представлены руководства, объясняющие базовое поведение платформы Android для каждого типа проблем и пошагово описывающие, как диагностировать, профилировать и устранять их с помощью таких инструментов, как Android Studio Profiler, Perfetto, Logcat и ApplicationExitInfo .
Стабильность
- ANR : Диагностика и устранение ошибок «Приложение не отвечает» (ANR), вызванных блокировкой потоков пользовательского интерфейса, операциями ввода-вывода основного потока, конфликтами блокировок или медленной работой широковещательных приемников.
- Сбои : Прочитывайте трассировки стека, анализируйте вывод Logcat и предотвращайте необработанные исключения и сигналы от собственных систем.
Рендеринг и запуск
- Медленная отрисовка : Выявление и устранение пропущенных или зависших кадров пользовательского интерфейса (
>16msи>700ms), вызванных ресурсоемкими операциями компоновки, проходами привязки или задержками основного потока. - Медленные сессии (только игры) : Измерьте частоту кадров с помощью
SurfaceFlingerи оптимизируйте частоту кадров в играх, используя Android Frame Pacing (Swappy), Vulkan и Android Dynamic Performance Framework (ADPF). - Время запуска приложения : понимание внутренних механизмов холодного, теплого и горячего запуска, измерение времени до первоначального отображения (TTID) и времени до полного отображения (TTFD), а также оптимизация процесса запуска.
Управление памятью
- Механизмы, блокирующие использование памяти (LMK) : разберитесь, как демон Android Low Memory Killer (
lmkd) определяет приоритеты процессов с помощьюoom_adj_scoreи профилирует объем используемой памяти в Android Studio, Unity и Unreal Engine. - Использование памяти (анонимный RSS + файл подкачки) : Измерьте и уменьшите размер анонимного набора резидентных файлов (RSS) и размер файла подкачки вашего приложения в фоновом, служебном и служебном режимах.
- Использование памяти для растровых изображений : Диагностика чрезмерного размера или утечек памяти для растровых изображений и освобождение графических буферов при перемещении компонентов пользовательского интерфейса в фоновый режим.
Работа с батареей и фоновые процессы
- Чрезмерное количество блокировок пробуждения : Избегайте длительного удержания частичных блокировок пробуждения и перенесите фоновые задачи в
WorkManagerилиJobScheduler. - Зависшие частичные блокировки пробуждения : Убедитесь, что каждая полученная частичная блокировка пробуждения корректно освобождается на всех путях выполнения и обработки ошибок.
- Чрезмерное количество пробуждений : уменьшите количество точных пробуждений по будильнику и объединяйте или откладывайте запланированные фоновые задачи.
- Чрезмерное фоновое сканирование Wi-Fi : минимизируйте частоту фонового сканирования Wi-Fi и используйте пассивные или пакетные API для определения местоположения и подключения.
- Чрезмерное использование сети в фоновом режиме : пакетная обработка и отсрочка фоновых передач данных в мобильной сети с использованием ограничений
WorkManager. - Чрезмерное потребление заряда батареи : Диагностика высокого расхода заряда батареи на мобильных устройствах и устройствах Wear OS путем анализа активности процессора, датчиков и радиомодуля.
Оптимизация прав доступа и сборки
- Отказ в предоставлении доступа : Запрашивайте разрешения во время выполнения в контексте и четко объясняйте пользователям обоснование предоставления разрешений.
- Оптимизация кода DEX : настройте правила сжатия, обфускации и оптимизации R8 для уменьшения размера DEX и повышения производительности во время выполнения.