Спящий режим приложения

Средний пользователь Android устанавливает более 50 приложений на свои устройства (число увеличивается по мере увеличения уровня оперативной памяти устройств). Однако значительное количество этих приложений не используется пользователем в течение длительного периода времени.

Спящий режим приложения переводит в спящий режим приложения, которые пользователь не использует в течение нескольких месяцев, аналогично автоматическому отзыву разрешений. Это принудительно останавливает приложение и переводит его в состояние, в котором мы оптимизируем хранилище, а не производительность. Автоматический отзыв разрешений также связан с этим состоянием, и они имеют одинаковую настройку исключения в настройках . Принудительно остановленное приложение не запускает задания или оповещения в фоновом режиме и не может отправлять push-уведомления. Когда пользователь снова использует приложение, приложение выходит из режима гибернации, а задания/предупреждения/уведомления снова запускаются в обычном режиме. Любые задания/оповещения/уведомления, которые были запланированы до того, как приложение перешло в спящий режим, необходимо перепланировать.

OEM-производители, изменяющие платформу, могут конфликтовать с реализацией спящего режима приложения. Например

  • Изменение определения использования приложения или введение способов пробуждения приложения, которого нет в AOSP, может нарушить точность гибернации приложения.
  • Собственный механизм ограничения OEM, аналогичный спящему режиму приложения, может выполнять аналогичную цель. Хотя оба могут существовать, может быть некоторое совпадение.

CDD описывает новый набор требований для изменений, основанных на использовании приложения, аналогично существующему требованию 3.5.1 . Спящий режим приложения соответствует этим требованиям.

Код фреймворка живет в:

Логика политики живет в:

  • репо: платформа/пакеты/модули/разрешение
  • каталог: PermissionController/src/com/android/permissioncontroller/hibernation

Архитектура высокого уровня

Системная служба гибернации приложений оптимизирует редко используемые пользователем приложения для хранения и предотвращает запуск этих приложений в фоновом режиме. Для достижения этих результатов, когда мы переводим приложение в спящий режим, мы специально:

  • Автоматически отзывать разрешения
  • Принудительно остановить приложение
  • Удалите файлы ODEX и VDEX.
  • Удалить кеш приложения

Наша цель — реализовать гибернацию как обратимое действие, чтобы приложение по-прежнему было доступно пользователю через Launcher и другие поверхности с неповрежденными данными приложения. После запуска приложения мы восстановим его из состояния принудительной остановки и продолжим создание файлов ODEX и VDEX, как обычно.

Запланированный дизайн сосредоточен вокруг двух основных частей:

  • определение, когда пакет должен переходить в спящий режим
  • оптимизация спящего пакета

Новая системная служба AppHibernationService и служба заданий AppHibernationJobService, в PermissionController являются связующим звеном, контролирующим общее принятие решений и логику.

Определение того, когда пакет должен переходить в режим гибернации, в основном осуществляется UsageStatsService и управляется AppHibernationJobService в PermissionController . Эта логика политики находится в PermissionController , что позволяет нам динамически обновляться через Mainline. Кроме того, мы планируем добавить новый сигнал, использование компонентов, для регистрации использования компонентов пакета (например, сервисов, поставщиков контента) в качестве новой метрики в UsageStatsService .

Оптимизация пакета — это то место, где происходит вся фактическая экономия/оптимизация. AppHibernationService связывается с различными частями системы, чтобы остановить пакет, удалить данные кэша, удалить артефакты ART и т. д. Отзыв разрешения инициируется непосредственно из AppHibernationJobService , чтобы сохранить функцию автоматического отзыва на устройствах Android 11 и более ранних версий.

Пользовательский опыт

Пользователю предоставляется как информация, так и средства управления тем, какие приложения могут быть переведены в спящий режим.

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

Мы по-прежнему поддерживаем намерение разработчика запросить у пользователя освобождение от режима гибернации с помощью существующего намерения автоматического отзыва разрешений.

Обратная совместимость

Функции, относящиеся к спящему режиму, доступны начиная с Android 12. Эти функции не могли работать в более ранних версиях, поскольку компоненты платформы (например, новая системная служба) отсутствуют. Автоотзыв продолжает работать так, как реализовано в настоящее время для более ранних версий ОС.

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

Настройка

Поскольку часть реализации является частью компонента модульной системы, партнерам не рекомендуется изменять эту функцию. Вместо этого партнеры могут реализовать аналогичные функции/функции, если они соблюдают требования CDD.

Спящий режим приложения должен быть включен по умолчанию для всех приложений, предназначенных для Android 11 или более поздней версии. Это то же самое, что и автоматическое отзыв разрешений. Хотя сам параметр может быть включен, реализация гибернации приложений может различаться между приложениями, ориентированными на Android 11, и Android 11 (а именно, гибернация приложений работает только для приложений, ориентированных на Android 11, тогда как для приложений, ориентированных на Android 11, это, по сути, просто автоматический отзыв.

Кроме того, OEM-производители могут реализовывать аналогичную функцию. Однако эти функции нацелены на гораздо более короткие сроки оптимизации батареи, которые могут быть специфичными для OEM-производителей. Любые аналогичные функции ограничения приложений, разработанные OEM-производителями, могут сосуществовать с системой гибернации приложений, если они соответствуют существующим критериям, определенным в CDD .

Тестирование

Спящий режим приложения имеет CTS и модульные тесты, чтобы убедиться, что он работает правильно.