Перевод приложений в спящий режим

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

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

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

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

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

Код фреймворка находится в следующих файлах:

Логика правил находится в:

  • repo: platform/packages/modules/Permission
  • directory: PermissionController/src/com/android/permissioncontroller/hibernation

Общая архитектура

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

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

Мы хотим, чтобы режим спячки был обратимым, чтобы приложение оставалось доступным пользователю через панель запуска и другие интерфейсы с данными приложения. При запуске приложения мы восстановим его из состояния принудительной остановки и продолжим создание файлов 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-производителями, могут сосуществовать с системой спящего режима приложений, если они соответствуют существующим критериям, определенным в CDD.

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

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