Optimiser les fonctionnalités Sommeil et Mise en veille des applis

Android dispose de deux fonctionnalités d'économie d'énergie qui prolongent l'autonomie de la batterie de Gestion du comportement des applications lorsque l'appareil n'est pas branché à une source d'alimentation: Sommeil et Mise en veille des applications. La fonctionnalité Sommeil réduit la consommation de la batterie en différant Activité du processeur et du réseau en arrière-plan pour les applications lorsque l'appareil n'est pas utilisé pendant une longue période périodes. Mise en veille des applications : reporte l'activité réseau en arrière-plan pour applications sans activité récente de l'utilisateur

Lorsque l'appareil est en mode Sommeil, les applications l'accès à certaines fonctionnalités les ressources sont différées jusqu'à l'intervalle de maintenance. Les restrictions spécifiques sont répertoriés dans Gestion de l'alimentation restrictions.

Les fonctionnalités Sommeil et Mise en veille des applications gèrent le comportement de toutes les applications exécutées sous Android 6.0 ou une version ultérieure, qu'ils ciblent spécifiquement le niveau d'API 23 ou non. Pour garantir la meilleure expérience utilisateur, testez votre appli dans Sommeil et Application les modes veille et apportez les ajustements nécessaires à votre code. Les éléments suivants : fournissent des détails.

Comprendre la fonctionnalité Sommeil

Si un utilisateur laisse un appareil débranché et immobile pendant un certain temps, avec l'écran éteint, l'appareil passe en mode Sommeil. En mode Sommeil, le système tente pour économiser la batterie en limitant les applications d'accès au réseau et à une utilisation intensive du processeur services. Elle empêche également les applications d'accéder au réseau et reporte leur de tâches, de synchronisations et d'alarmes standards.

Régulièrement, le système quitte le mode Sommeil pendant un court instant pour laisser les applications se terminer leurs activités différées. Au cours de cet intervalle de maintenance, le système exécute toutes les synchronisations, tâches et alarmes en attente, et autorise les applications à accéder au réseau.

Figure 1. Doze fournit un intervalle de maintenance récurrent pour applications pour utiliser le réseau et gérer les activités en attente.

À la fin de la fenêtre de maintenance, le système passe à nouveau en mode Sommeil, la suspension de l'accès au réseau et le report des tâches, des synchronisations et des alarmes. Au fil du temps, les le système planifie moins souvent les fenêtres de maintenance, ce qui réduit la consommation consommation en cas d'inactivité prolongée lorsque l'appareil n'est pas en charge.

Lorsque l'utilisateur active l'appareil en le déplaçant, en allumant l'écran ou connectant un chargeur, le système quitte le mode Sommeil et toutes les applications redeviennent normales. activité.

Restrictions de sommeil

Le système applique les restrictions suivantes à vos applications lorsque vous êtes en mode Sommeil:

Checklist pour la fonctionnalité Sommeil

Adapter votre application à la fonctionnalité Sommeil

La fonctionnalité Sommeil peut affecter les applications différemment, selon les fonctionnalités qu'elles offrent et les services qu'ils utilisent. De nombreuses applications fonctionnent normalement pendant les cycles Sommeil sans les modifier. Dans certains cas, vous devez optimiser la façon dont votre application gère le réseau, les alarmes, les jobs et les synchronisations. Les applications doivent pouvoir gérer efficacement gérer les activités pendant chaque intervalle de maintenance.

Pour planifier plus facilement des alarmes, vous pouvez utiliser deux AlarmManager méthodes: setAndAllowWhileIdle() et setExactAndAllowWhileIdle() Ces méthodes vous permettent de définir des alarmes qui se déclenchent même si l'appareil est en mode Sommeil.

La restriction Sommeil sur l’accès au réseau est également susceptible d’affecter votre application, surtout si l'application s'appuie sur des messages en temps réel tels que des chatouilles ou les notifications. Si votre application nécessite une connexion persistante au réseau pour recevoir des messages, utilisez Firebase Cloud Messaging (FCM) si possible.

Pour vérifier que votre application se comporte comme prévu avec la fonctionnalité Sommeil, vous pouvez utiliser les commandes adb pour forcer le système à activer et à quitter le mode Sommeil, et observer le comportement de votre application. Pour en savoir plus, consultez Effectuez des tests avec les fonctionnalités Sommeil et Mise en veille des applications.

Comprendre la mise en veille des applications

La mise en veille des applications permet au système de déterminer qu'une application est inactive lorsque l'utilisateur l'utilisent activement. C'est le système qui prend cette décision n'interagissent pas avec l'application pendant un certain temps, et aucune des conditions suivantes s'applique:

  • L'utilisateur lance explicitement l'application.
  • L'application dispose actuellement d'un processus au premier plan, soit en tant qu'activité ou un service de premier plan, ou encore utilisée par une autre activité ou un service de premier plan.
  • L'application génère une notification que les utilisateurs voient sur l'écran de verrouillage ou dans la barre de notification.

Lorsque l'utilisateur branche l'appareil à une alimentation, le système libère les applications en veille, ce qui leur permet d'accéder librement au réseau et d'exécuter tâches et synchronisations en attente. Si l'appareil est inactif pendant une longue période, permet aux applications inactives d'accéder au réseau environ une fois par jour.

Utiliser FCM pour interagir avec votre appli lorsque l'appareil est inactif

Firebase Cloud Messaging (FCM) est un service cloud-to-device qui vous permet de fournir messagerie en aval entre les services de backend et les applications sur les appareils Android. FCM fournit une connexion unique et persistante au cloud. Toutes les applications nécessitant la messagerie en temps réel peut partager cette connexion. Cette connexion partagée optimise considérablement l'utilisation de la batterie en la rendant inutile plusieurs applications pour gérer leurs propres connexions persistantes distinctes, vider rapidement la batterie. Par conséquent, si votre application nécessite des messages à un service de backend, nous vous recommandons vivement d'utiliser FCM si plutôt que de maintenir votre propre connexion réseau persistante.

FCM est optimisé pour fonctionner avec les modes d'inactivité Sommeil et Mise en veille des applications. FCM les messages à priorité élevée vous permettent d'activer votre application pour engager l'utilisateur. En mode Sommeil ou Application En mode veille, le système transmet le message et autorise l'application à accéder temporairement aux services réseau et aux wakelocks partiels, puis renvoie l'appareil ou l'application au l'état inactif. Pour les notifications urgentes et visibles par l'utilisateur, envisagez d'utiliser des les messages prioritaires pour activer la distribution en mode Sommeil. Les messages à priorité élevée entraîner l'envoi de notifications. Voir de FCM de Google sur les messages à priorité élevée.

Pour les messages qui n'entraînent pas de notifications, comme la conservation du contenu de l'application à jour en arrière-plan ou en train de lancer des synchronisations de données, utilisez FCM de priorité normale messages. Les messages de priorité normale sont distribués immédiatement si l'appareil n'est pas en mode Sommeil. Si l'appareil est en mode Sommeil, ils sont émis pendant la Intervalles de maintenance en veille ou dès que l'utilisateur active l'appareil.

En règle générale, si votre application nécessite des messages en aval, utilisez FCM. Si votre application utilise déjà FCM, assurez-vous qu'elle utilise des messages à priorité élevée que pour les messages qui font l'objet de notifications visibles par l'utilisateur.

Autres cas d'utilisation

Presque toutes les applications sont compatibles avec la fonctionnalité Sommeil en gérant la connectivité réseau, des alarmes, des jobs et des synchronisations, et en utilisant des messages FCM. Pour un ensemble restreint d'utilisations dans certains cas, cela peut être insuffisant. Dans ce cas, le système fournit Liste configurable des applications qui sont partiellement exemptées des fonctionnalités Sommeil et Mise en veille des applications et des optimisations.

Une application partiellement exemptée peut utiliser le réseau et conserver un activation partielle se verrouille pendant les périodes Sommeil et Mise en veille des applications. Toutefois, d'autres restrictions s'appliquent à l'application, tout comme pour d'autres applications. Par exemple, les tâches et les synchronisations sont différés à partir du niveau d'API 23. Les alarmes AlarmManager ne se déclenchent pas. Une application peut vérifier si qui figurent actuellement sur la liste des exceptions en appelant la méthode isIgnoringBatteryOptimizations()

Les utilisateurs peuvent configurer manuellement la liste des applications exemptées dans les paramètres > Batterie > Optimisation de la batterie. Le système propose aux applications des moyens de demander aux utilisateurs de les exempter:

Une application peut vérifier si elle se trouve actuellement sur la liste des exceptions en appelant la méthode isIgnoringBatteryOptimizations()

Tester avec les fonctionnalités Sommeil et Mise en veille des applications

Pour garantir une expérience optimale à vos utilisateurs, testez entièrement votre application en mode Sommeil et Mise en veille des applications.

Tester votre application avec la fonctionnalité Sommeil

Vous pouvez tester le mode Sommeil en procédant comme suit:

  1. Configurer un appareil matériel ou virtuel avec Android 6.0 (API) (niveau 23) ou une image système ultérieure.
  2. Connectez l'appareil à votre ordinateur de développement et installez votre application.
  3. Exécutez votre application et laissez-la active.
  4. Forcez le système en mode inactif en exécutant la commande suivante:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Lorsque vous êtes prêt, quittez le mode inactif en exécutant la commande suivante:
        $ adb shell dumpsys deviceidle unforce
        
  6. Réactivez l'appareil en exécutant la commande suivante:
        $ adb shell dumpsys battery reset
        
  7. Observez le comportement de votre application une fois l'appareil réactivé. Marque assurez-vous que l'application se rétablit correctement lorsque l'appareil quitte le mode Sommeil.

Tester votre application avec App Standby

Pour tester le mode Mise en veille des applications avec votre application, procédez comme suit:

  1. Configurer un appareil matériel ou virtuel avec Android 6.0 (API) (niveau 23) ou une image système ultérieure.
  2. Connectez l'appareil à votre ordinateur de développement et installez votre application.
  3. Exécutez votre application et laissez-la active.
  4. Forcez l'application à passer en mode Mise en veille des applications en exécutant les commandes suivantes:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Simulez l'activation de l'application à l'aide des commandes suivantes:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Observez le comportement de votre application après l'avoir activée. Assurez-vous que l'application se rétablit normalement à partir du mode veille. Vérifiez en particulier si l'accès les notifications et les tâches d'arrière-plan fonctionnent comme prévu.

Cas d'utilisation autorisée pour l'exemption

Le tableau suivant met en évidence plusieurs cas d'utilisation et indique s'ils sont acceptables pour que les applications utilisent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS une action d'intent dans ces situations. En général, votre application ne respecte pas ces sauf si les fonctionnalités Sommeil ou Mise en veille des applications empêchent la fonctionnalité de base de l'application ou il existe une raison technique pour laquelle votre application ne peut pas utiliser la priorité élevée de FCM messages.

Pour plus d'informations, consultez la page Compatibilité dans d'autres cas d'utilisation.

Type Cas d'utilisation Peut utiliser FCM ? Exception acceptable ? Notes
Application de messagerie instantanée, de chat ou d'appel Nécessite la livraison de messages en temps réel aux utilisateurs l'appareil est en veille ou l'application est en veille des applications. Oui, avec FCM Non autorisé Utiliser les messages à priorité élevée de FCM pour activer l'application et y accéder le réseau.
Oui, mais n'utilise pas les messages FCM à priorité élevée.
Application de messagerie instantanée, de chat ou d'appel les applications VoIP d'entreprise. Non, impossible d'utiliser FCM en raison d'une dépendance technique à un autre message ou les fonctionnalités Sommeil et Mise en veille des applis perturbent la fonction essentielle de l'appli. Acceptable
Sécurité. Des applications qui protègent leurs utilisateurs et leur famille À renseigner le cas échéant. Acceptable
Application d'automatisation des tâches La principale fonction de l'application est de planifier des actions automatisées, l'envoi de messages, les appels vocaux ou la nouvelle gestion des photos. À renseigner le cas échéant. Acceptable
Application associée au périphérique La principale fonction de l'application est de maintenir une connexion persistante avec périphérique dans le but de fournir le périphérique l'accès à Internet. À renseigner le cas échéant. Acceptable
L'appli a seulement besoin de se connecter régulièrement à un périphérique pour se synchroniser, ou n'a besoin de se connecter qu'à des appareils, comme un casque sans fil, via des profils Bluetooth standards. À renseigner le cas échéant. Non autorisé