Новости о продуктах

Подготовка вашего приложения к более широким ограничениям по объему памяти.

2 минуты чтения
Посмотреть профиль Блэра Хармона
Blair Harmon директор по управлению продуктами платформы Android.

Отличный пользовательский опыт является центральным элементом миссии Android, и для выполнения этого обещания необходимо, чтобы устройства работали быстро, отзывчиво и надежно. Именно поэтому оптимизация памяти важна как никогда. В рамках всей экосистемы новые устройства сохраняют или даже уменьшают свой физический объем памяти в ответ на рост цен на память, но пользователи по-прежнему ожидают того же бесперебойного и высокопроизводительного взаимодействия с приложениями.

В Android 17 мы ввели ограничения на использование памяти для каждого приложения , начиная с устройств Pixel, чтобы защитить общее качество работы пользователя от приложений, использующих избыточную память и вызывающих замедление работы системы. В течение следующего года все больше производителей будут использовать ограничения на использование памяти для каждого приложения в своих устройствах с конфигурацией оперативной памяти от 4 ГБ до 16 ГБ и более. Если ваше приложение превысит эти лимиты, оно будет замедляться и может быть закрыто. Оптимизация использования памяти вашим приложением имеет важное значение для предотвращения снижения производительности операционной системы и поддержания бесперебойной работы пользователя.  

В этой статье мы рассмотрим, как работают эти ограничения на уровне внутренней архитектуры, как измерить объем используемой памяти с помощью новых метрик Android Vitals, а также практические шаги по оптимизации вашего приложения или игры.

Понимание ограничений памяти

Когда ваше приложение превышает выделенный ему объем памяти, Android предпринимает поэтапные действия для защиты быстродействия устройства:

  1. Подкачка zRAM : Если ваше приложение достигает выделенного лимита, система принудительно перемещает страницы приложения в zRAM (сжатую оперативную память). Хотя zRAM предотвращает немедленное вытеснение, сжатие и распаковка страниц увеличивают нагрузку на процессор, что может привести к заметным рывкам пользовательского интерфейса и замедлению работы приложения.
  2. Завершение процесса : Если ваше приложение продолжает увеличивать использование памяти сверх порогового значения zRAM, оно будет завершено системой . Чтобы определить, повлияли ли эти ограничения на сеанс вашего приложения, вы можете вызвать getDescription() внутри ApplicationExitInfo . Если система применила ограничение, причина завершения будет указана как REASON_OTHER , а строка описания будет содержать "MemoryLimiter:AnonSwap". Вы также можете использовать профилирование на основе триггеров с помощью TRIGGER_TYPE_ANOMALY для автоматического создания дампов кучи при достижении лимита памяти.

Чтобы узнать больше об ограничениях памяти для каждого приложения и системном применении ограничений, ознакомьтесь с документацией по ограничениям памяти приложений в Android 17. Для тестирования вашего приложения на различных конфигурациях устройств используйте команды adb Memory Limiter .

Мониторинг и диагностика проблем с памятью

Невозможно оптимизировать то, что нельзя измерить. Выявление утечек памяти, чрезмерного выделения памяти в куче и сбоев, связанных с нехваткой памяти (OOM), в экосистеме Android требует использования дополнительных инструментов мониторинга:

  • Обзор состояния системы на макроуровне с помощью Android Vitals: для широкого обзора на уровне всего сообщества без дополнительных затрат Google Play Console предоставляет важные метрики Android Vitals, такие как использование памяти (анонимный RSS + файл подкачки). и Bitmap Memory Usage . Это дает четкое представление о распределении памяти по различным состояниям процесса (активный, фоновый, воспринимаемые пользователем службы и кэшированные) и диапазонам классов ОЗУ, помогая выявлять аномалии в использовании памяти.
  • Отслеживание сбоев ограничителя памяти и ошибок нехватки памяти с помощью Firebase Crashlytics: Чтобы быть в курсе серьезного снижения производительности памяти до того, как это повлияет на ваши ключевые показатели, в версии Crashlytics 20.1.0 добавлены дополнительные отладочные данные, которые помогут вам перехватывать, расставлять приоритеты и исправлять исключения нехватки памяти и сбои ограничителя памяти. Отслеживание этих событий вместе с пользовательскими журналами и метаданными типа «ключ-значение» дает вам мгновенный контекст состояния процесса при возникновении сбоя памяти.
  • Трассировка в полевых условиях с помощью ProfilingManager: Для команд, способных поддерживать систему мониторинга производительности, API ProfilingManager представленный в Android 15 (уровень API 35), позволяет вашему приложению программно запрашивать и собирать подробные артефакты отладки памяти, такие как дампы кучи Java и профили кучи, непосредственно с производственных устройств. Вы также можете запускать захват дампов кучи на основе определенных системных сигналов, таких как TRIGGER_TYPE_OOM и TRIGGER_TYPE_ANOMALY .

Ознакомьтесь с нашей документацией , чтобы узнать больше о других методах мониторинга памяти.

Краткое содержание и дальнейшие действия

В связи с расширением ограничений на использование памяти для каждого приложения в Android по всем классам оперативной памяти, сейчас самое время провести аудит используемой памяти:

  1. Уделяйте приоритетное внимание оптимизации памяти : предотвратите влияние ограничений памяти на работу вашего приложения, используя лучшие практики .
  2. Мониторинг использования памяти : отслеживайте поведение вашего приложения в отношении памяти , чтобы выявлять и устранять аномалии.
  3. Оптимизируйте свою игру : следуйте последним рекомендациям для игр и сложных мультимедийных приложений, чтобы максимально сэкономить память на разных этапах процесса.

Полезные ресурсы и справочные материалы

Автор:
Продолжить чтение