Changements de comportement : toutes les applications

La plate-forme Android 16 apporte des modifications de comportement susceptibles d'affecter votre application. Les modifications de comportement suivantes s'appliquent à toutes les applications lorsqu'elles s'exécutent sur Android 16, peu importe la targetSdkVersion. Vous devez tester votre application, puis la modifier si nécessaire afin de prendre en charge ces modifications, le cas échéant.

Veillez également à consulter la liste des modifications de comportement qui n'affectent que les applications ciblant Android 16.

Fonctionnalité de base

Android 16 inclut les modifications suivantes qui modifient ou étendent diverses fonctionnalités de base du système Android.

Optimisations des quotas JobScheduler

À partir d'Android 16, nous ajustons le quota d'exécution d'une tâche régulière et accélérée en fonction des facteurs suivants:

  • Dans quel bucket de veille de l'application se trouve l'application: dans Android 16, les buckets de veille actifs commenceront à être appliqués par un quota d'exécution généreux.
  • Si la tâche commence l'exécution alors que l'application est en premier plan: sous Android 16, les tâches démarrées alors que l'application est visible par l'utilisateur et qui se poursuivent après que l'application est devenue invisible respectent le quota d'exécution de la tâche.
  • Si la tâche s'exécute pendant l'exécution d'un service de premier plan: dans Android 16, les tâches qui s'exécutent simultanément avec un service de premier plan respectent le quota d'exécution de la tâche. Si vous utilisez des tâches pour le transfert de données déclenché par l'utilisateur, envisagez d'utiliser plutôt des tâches de transfert de données déclenchées par l'utilisateur.

Ce changement affecte les tâches planifiées à l'aide de WorkManager, JobScheduler et DownloadManager. Pour déboguer la raison pour laquelle une tâche a été arrêtée, nous vous recommandons de consigner la raison pour laquelle votre tâche a été arrêtée en appelant WorkInfo.getStopReason() (pour les tâches JobScheduler, appelez JobParameters.getStopReason()).

Pour en savoir plus sur les bonnes pratiques d'optimisation de la batterie, consultez les conseils sur l'optimisation de l'utilisation de la batterie pour les API de planification des tâches.

Nous vous recommandons également d'utiliser la nouvelle API JobScheduler#getPendingJobReasonsHistory introduite dans Android 16 pour comprendre pourquoi une tâche n'a pas été exécutée.

Tests

Pour tester le comportement de votre application, vous pouvez activer le forçage de certaines optimisations de quota de tâches tant que l'application s'exécute sur un appareil Android 16.

Pour désactiver l'application de la règle "L'état supérieur respectera le quota d'exécution de la tâche", exécutez la commande adb suivante:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

Pour désactiver l'application de la règle "Les tâches exécutées simultanément avec un service de premier plan respectent le quota d'exécution des tâches", exécutez la commande adb suivante:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

Pour tester certains comportements de bucket de mise en veille de l'application, vous pouvez définir le bucket de mise en veille de votre application à l'aide de la commande adb suivante:

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

Pour comprendre le bucket de mise en veille de votre application, vous pouvez obtenir le bucket de mise en veille de votre application à l'aide de la commande adb suivante:

adb shell am get-standby-bucket APP_PACKAGE_NAME

Abandon complet de JobInfo#setImportantWhileForeground

La méthode JobInfo.Builder#setImportantWhileForeground(boolean) indique l'importance d'une tâche lorsque l'application de planification est au premier plan ou lorsqu'elle est temporairement exemptée des restrictions en arrière-plan.

Cette méthode est obsolète depuis Android 12 (niveau d'API 31). À partir d'Android 16, elle ne fonctionne plus efficacement et l'appel de cette méthode sera ignoré.

Cette suppression de fonctionnalité s'applique également à JobInfo#isImportantWhileForeground(). À partir d'Android 16, si la méthode est appelée, elle renvoie false.

Expérience utilisateur et interface utilisateur du système

Android 16 inclut les modifications suivantes, qui visent à créer une expérience utilisateur plus cohérente et intuitive.

Abandon des annonces d'accessibilité intrusives

Android 16 abandonne les annonces d'accessibilité, caractérisées par l'utilisation de announceForAccessibility ou l'envoi d'événements d'accessibilité TYPE_ANNOUNCEMENT. Cela peut créer des expériences utilisateur incohérentes pour les utilisateurs de TalkBack et du lecteur d'écran d'Android. Les alternatives répondent mieux à un plus large éventail de besoins des utilisateurs dans diverses technologies d'assistance d'Android.

Exemples d'alternatives:

La documentation de référence de l'API announceForAccessibility obsolète inclut plus de détails sur les alternatives suggérées.