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

Средний пользователь 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 12. Точнее, спящий режим приложений работает только для приложений, ориентированных на Android 11, тогда как для приложений, ориентированных на Android 12, это по сути просто автоматический отзыв.

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

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

Для обеспечения корректной работы спящего режима приложения предусмотрены CTS и модульные тесты.