Изменения поведения: все приложения

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

Обязательно ознакомьтесь также со списком изменений поведения, которые влияют только на приложения, ориентированные на Android 16 .

Основная функциональность

Android 16 включает следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.

Оптимизация квот JobScheduler

Начиная с Android 16, мы корректируем квоту времени выполнения обычных и ускоренных заданий на основе следующих факторов:

  • В каком резервном сегменте приложения находится приложение : в Android 16 активные резервные сегменты начнут обеспечиваться щедрой квотой времени выполнения.
  • Если задание начинает выполнение, когда приложение находится в верхнем состоянии : в Android 16 задания запускаются, пока приложение видно пользователю, и продолжаются после того, как приложение становится невидимым, будут соответствовать квоте времени выполнения задания.
  • Если задание выполняется во время работы службы переднего плана : в Android 16 задания, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания. Если вы используете задания для передачи данных, инициируемой пользователем, рассмотрите возможность использования вместо этого заданий передачи данных, инициируемых пользователем .

Это изменение влияет на задачи, запланированные с помощью WorkManager, JobScheduler и DownloadManager. Чтобы выяснить, почему задание было остановлено, мы рекомендуем записать причину, по которой ваше задание было остановлено, вызвав WorkInfo.getStopReason() (для заданий JobScheduler вызовите JobParameters.getStopReason() ).

Дополнительные сведения о рекомендациях по оптимальному использованию аккумулятора см. в руководстве по оптимизации использования аккумулятора для API планирования задач .

Мы также рекомендуем использовать новый API JobScheduler#getPendingJobReasonsHistory представленный в Android 16, чтобы понять, почему задание не выполнено.

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

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

Чтобы отключить принудительное применение «верхнего состояния будет соответствовать квоте выполнения задания», выполните следующую команду adb :

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

Чтобы отключить принудительное выполнение «заданий, которые выполняются одновременно со службой переднего плана, будут соответствовать квоте времени выполнения задания», выполните следующую команду adb :

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

Чтобы протестировать поведение определенного резервного сегмента приложения, вы можете настроить резервный сегмент вашего приложения с помощью следующей команды adb :

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

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

adb shell am get-standby-bucket APP_PACKAGE_NAME

Полное прекращение поддержки JobInfo#setImportantWhileForeground

Метод JobInfo.Builder#setImportantWhileForeground(boolean) указывает на важность задания, когда приложение планирования находится на переднем плане или когда временно освобождено от фоновых ограничений.

Этот метод устарел с Android 12 (уровень API 31). Начиная с Android 16, он больше не работает эффективно, и вызов этого метода будет игнорироваться.

Это удаление функциональности также применимо к JobInfo#isImportantWhileForeground() . Начиная с Android 16, при вызове метода метод возвращает false .

Упорядоченная область приоритета широковещательной передачи больше не является глобальной.

Приложениям Android разрешено определять приоритеты приемников вещания, чтобы контролировать порядок, в котором получатели получают и обрабатывают трансляцию. Для получателей, объявленных в манифесте, приложения могут использовать атрибут android:priority для определения приоритета, а для получателей, зарегистрированных в контексте, приложения могут использовать API IntentFilter#setPriority() для определения приоритета. При отправке широковещательной рассылки система доставляет ее получателям в порядке их приоритета, от самого высокого к самому низкому.

В Android 16 порядок широковещательной доставки с использованием атрибута android:priority или IntentFilter#setPriority() между различными процессами не гарантируется. Приоритеты вещания будут соблюдаться только в рамках одного и того же процесса подачи заявки, а не во всех процессах.

Кроме того, приоритеты вещания будут автоматически ограничены диапазоном ( SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY – 1). Только системным компонентам будет разрешено устанавливать SYSTEM_LOW_PRIORITY , SYSTEM_HIGH_PRIORITY в качестве приоритета широковещания.

Ваше приложение может пострадать, если оно выполняет одно из следующих действий:

  1. Ваше приложение объявило несколько процессов с одним и тем же намерением широковещания и ожидает получения этих намерений в определенном порядке в зависимости от приоритета.
  2. Процесс вашего приложения взаимодействует с другими процессами и ожидает получения широковещательного намерения в определенном порядке.

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

Внутренние изменения АРТ

Android 16 включает последние обновления среды выполнения Android (ART), которые улучшают производительность среды выполнения Android (ART) и обеспечивают поддержку дополнительных функций Java. Благодаря обновлениям системы Google Play эти улучшения также доступны более чем миллиарду устройств под управлением Android 12 (уровень API 31) и выше .

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

Использование внутренних структур (например, интерфейсов, отличных от SDK ) всегда может привести к проблемам совместимости, но особенно важно избегать использования кода (или библиотек, содержащих код), который использует внутренние структуры ART, поскольку изменения ART не привязаны к платформе. версию, на которой работает устройство, и они распространяются на более чем миллиард устройств через обновления системы Google Play.

Всем разработчикам следует проверить, не затронуто ли их приложение, путем тщательного тестирования своих приложений на Android 16. Кроме того, проверьте известные проблемы , чтобы узнать, зависит ли ваше приложение от каких-либо выявленных нами библиотек, которые полагаются на внутренние структуры ART. Если у вас есть код приложения или зависимости библиотеки, которые затронуты, по возможности ищите альтернативы общедоступным API и запросите общедоступные API для новых вариантов использования, создав запрос функции в нашем отслеживании проблем.

Пользовательский опыт и системный интерфейс

Android 16 включает следующие изменения, призванные создать более последовательный и интуитивно понятный пользовательский интерфейс.

Отказ от деструктивных объявлений о доступности

В Android 16 больше не поддерживаются объявления о специальных возможностях, характеризующиеся использованием announceForAccessibility или отправкой событий доступности TYPE_ANNOUNCEMENT . Это может создать несогласованный пользовательский опыт для пользователей TalkBack и программы чтения с экрана Android, а альтернативы лучше удовлетворяют более широкий спектр потребностей пользователей в различных вспомогательных технологиях Android.

Примеры альтернатив:

Справочная документация по устаревшему API announceForAccessibility содержит более подробную информацию о предлагаемых альтернативах.

Поддержка трехкнопочной навигации.

В Android 16 добавлена ​​поддержка прогнозного возврата в трехкнопочную навигацию для приложений, которые правильно перешли на интеллектуальный возврат . Длительное нажатие кнопки «Назад» запускает прогнозирующую анимацию возврата, давая вам предварительный просмотр того, куда вас приведет смахивание назад.

Такое поведение применимо ко всем областям системы, которые поддерживают прогнозирующую анимацию возврата, включая системную анимацию (возврат домой, перекрестные задачи и перекрестные действия).

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