Android 9 (уровень API 28) и более поздние версии поддерживают резервные сегменты приложений . Резервные сегменты приложений помогают системе расставлять приоритеты в запросах приложений на ресурсы в зависимости от того, как недавно и как часто они использовались. В зависимости от моделей использования приложений каждое приложение помещается в одну из пяти приоритетных групп . Система ограничивает ресурсы устройства, доступные каждому приложению, в зависимости от того, в каком сегменте оно находится.
Приоритетные сегменты
Система динамически назначает каждому приложению приоритетный сегмент, переназначая приложения по мере необходимости. Система может полагаться на предварительно загруженное приложение, которое использует машинное обучение для определения вероятности использования каждого приложения и распределяет приложения по соответствующим сегментам.
Если системное приложение отсутствует на устройстве, система по умолчанию сортирует приложения по тому, как давно они использовались. Приложения, которые более активны, назначаются сегментам, которые дают им более высокий приоритет, предоставляя приложению больше системных ресурсов. В частности, сегмент определяет, как часто выполняются задания приложения и как часто приложение может вызывать сигналы тревоги. Эти ограничения применяются только тогда, когда устройство работает от аккумулятора. Пока устройство заряжается, система не накладывает эти ограничения.
Приоритетными сегментами являются следующие:
- Активно : приложение используется или использовалось совсем недавно.
- Рабочий набор : приложение используется регулярно.
- Часто : приложение используется часто, но не ежедневно.
- Редко : приложение используется нечасто.
- Ограничено : приложение потребляет много системных ресурсов или может демонстрировать нежелательное поведение.
В дополнение к этим сегментам приоритета существует специальный сегмент «Никогда» для приложений, которые установлены, но никогда не запускались. Система накладывает строгие ограничения на эти приложения.
Следующие описания относятся к непрогнозируемому случаю. Напротив, когда прогнозирование использует машинное обучение для прогнозирования поведения, сегменты выбираются в ожидании следующих действий пользователя, а не на основе недавнего использования. Например, недавно использованное приложение может оказаться в корзине редких приложений, поскольку машинное обучение прогнозирует, что приложение может не использоваться в течение нескольких часов.
Активный
Приложение находится в активном сегменте, пока оно используется, использовалось совсем недавно или когда оно выполняет любое из следующих действий:
- Запускает деятельность.
- Запускает долго работающую службу переднего плана.
- Нажимается пользователем из уведомления.
Если приложение находится в активном сегменте, система не накладывает никаких ограничений на задания или сигналы приложения.
Взаимодействие с пользователем назначает приложения как активные.
В Android 9 (уровень API 28) и более поздних версиях, когда пользователь взаимодействует с вашим приложением определенным образом, система временно помещает ваше приложение в активный сегмент. После того, как пользователь перестает взаимодействовать с вашим приложением, система помещает его в корзину на основе истории использования.
Ниже приведены примеры взаимодействий, которые вызывают такое поведение системы:
Пользователь нажимает на уведомление, которое отправляет ваше приложение.
Пользователь взаимодействует со службой переднего плана в вашем приложении, нажимая кнопку мультимедиа .
Пользователь подключается к вашему приложению во время взаимодействия с Android Automotive OS , где ваше приложение использует либо службу переднего плана, либо
CONNECTION_TYPE_PROJECTION
.
Рабочий набор
Приложение находится в сегменте рабочего набора , если оно часто запускается, но не активно. Например, приложение для социальных сетей, которое пользователь запускает почти ежедневно, скорее всего, будет в рабочем наборе. Приложения также переводятся в корзину рабочего набора, если они используются косвенно.
Если приложение находится в рабочем наборе, система накладывает мягкие ограничения на его способность запускать задания и вызывать сигналы тревоги. Подробности см. в разделе Ограничения управления питанием .
Частый
Приложение попадает в корзину частого использования , если оно используется регулярно, но не обязательно каждый день. Например, приложение для отслеживания тренировок, которое пользователь запускает в тренажерном зале, может находиться в сегменте частого использования.
Если приложение находится в сегменте частого использования, система налагает более строгие ограничения на его способность запускать задания и активировать сигналы тревоги. Подробности см. в разделе Ограничения управления питанием .
Редкий
Приложение попадает в корзину редких , если оно не используется часто. Например, приложение для отеля, которое пользователь запускает только во время пребывания в этом отеле, может оказаться в категории редких.
Если приложение находится в сегменте редких приложений, система накладывает строгие ограничения на его способность запускать задания и вызывать сигналы тревоги. Система также ограничивает возможность приложения подключаться к Интернету. Подробности см. в разделе Ограничения управления питанием .
Ограниченный
Этот сегмент, добавленный в Android 12 (уровень API 31), имеет самый низкий приоритет и самые высокие ограничения из всех сегментов. Система учитывает поведение вашего приложения, например, как часто пользователь взаимодействует с ним, чтобы решить, помещать ли ваше приложение в корзину с ограниченным доступом.
В Android 13 (уровень API 33) и более поздних версиях, если ваше приложение не подпадает под исключение , система помещает ваше приложение в корзину с ограниченным доступом в следующих ситуациях:
Пользователь не взаимодействует с вашим приложением определенное количество дней. В Android 12 (уровень API 31) и 12L (уровень API 32) количество дней равно 45. В Android 13 количество дней уменьшено до 8.
Ваше приложение вызывает чрезмерное количество широковещательных рассылок или привязок в течение 24 часов.
Если система помещает ваше приложение в корзину с ограниченным доступом, применяются следующие ограничения:
- Вы можете запускать задания один раз в день в рамках 10-минутного пакетного сеанса. Во время этого сеанса система группирует задания вашего приложения с заданиями других приложений.
- Ограниченные задания не выполняются сами по себе. Одновременно должно быть хотя бы одно другое задание, выполняющееся или ожидающее выполнения, которое может включать в себя любое другое задание.
- Ваше приложение может выполнять меньше ускоренных заданий по сравнению с тем, когда система помещает ваше приложение в менее строгий сегмент.
- Ваше приложение может вызывать один сигнал тревоги в день. Этот сигнал тревоги может быть либо точным , либо неточным .
Исключения из ограниченной корзины
Следующие типы приложений не попадают в корзину с ограниченным доступом и обходят триггер неактивности даже на Android 12 и более поздних версиях:
- Приложения для сопутствующих устройств
- Приложения, работающие на устройстве в демонстрационном режиме
- Приложения владельца устройства
- Приложения для владельцев профилей
- Постоянные приложения
- VPN-приложения
- Приложения с ролью
ROLE_DIALER
- Приложения, которые пользователь явно назначил для предоставления «неограниченной» функциональности в настройках системы.
- Приложения с активными виджетами
- Приложения, которым предоставлено хотя бы одно из следующих разрешений:
Оцените сегмент приоритетов
Чтобы проверить, к какому сегменту относится ваше приложение, выполните одно из следующих действий:
Вызовите
getAppStandbyBucket()
.Запустите следующую команду в окне терминала:
adb shell am get-standby-bucket PACKAGE_NAME
Система регулирует ваше приложение всякий раз, когда оно помещается в резервный сегмент приложения, значение которого превышает STANDBY_BUCKET_ACTIVE
(10).
Лучшие практики
Если ваше приложение следует рекомендациям по Doze и режиму ожидания, последующие функции управления питанием не будут сложными. Однако некоторые варианты поведения приложений, которые раньше работали хорошо, могут вызвать проблемы.
- Не пытайтесь манипулировать системой, чтобы поместить ваше приложение в определенную корзину. Системный метод определения приоритетов может измениться, и каждый производитель устройств может решить написать собственное приложение для группировки со своим собственным алгоритмом. Вместо этого убедитесь, что ваше приложение ведет себя соответствующим образом независимо от того, в каком сегменте оно находится.
- Если у приложения нет активности средства запуска, оно может никогда не быть переведено в активный сегмент. Рассмотрите возможность изменения дизайна вашего приложения, чтобы в нем была такая деятельность.
Если пользователи не могут взаимодействовать с уведомлениями приложения, они не смогут инициировать продвижение приложения в активный сегмент. В этом случае рассмотрите возможность изменения дизайна некоторых уведомлений, позволяющих пользователям взаимодействовать. Некоторые рекомендации см. в шаблонах проектирования Material Design Notifications .
Если приложение не отображает уведомление при получении высокоприоритетного сообщения Firebase Cloud Messaging (FCM) , пользователь не сможет взаимодействовать с приложением и, таким образом, перевести его в активный сегмент. Фактически, единственное предполагаемое использование сообщений FCM с высоким приоритетом — это отправка уведомления пользователю, поэтому такая ситуация не должна возникать. В версии 12L (уровень API 32) и ниже, если вы неправильно пометите сообщение FCM как высокий приоритет, когда оно не вызывает взаимодействия с пользователем, это может привести к потере приоритета будущих сообщений.
Если приложения разделены на несколько пакетов, эти пакеты могут находиться в разных сегментах и иметь разные уровни доступа. Протестируйте эти приложения с пакетами, назначенными различным сегментам, чтобы убедиться, что приложение работает правильно.