Гибернация приложения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Новая система обслуживания, AppHibernationService и обслуживание рабочих мест, AppHibernationJobService, в PermissionController это клей , который управляет общей принятия решений и логика.

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

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

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

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

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

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

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

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

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

Настройка

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

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

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

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

В режиме гибернации приложения есть CTS и модульные тесты, чтобы убедиться, что оно работает правильно.