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 de temps. 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.
![](https://developer.android.google.cn/static/images/training/doze.png?authuser=0000&hl=fr)
À 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:
- Suspend l'accès au réseau.
- Ignore l'activation de verrouillage.
- Diffère le standard
AlarmManager
des alarmes, y comprissetExact()
etsetWindow()
, à l'intervalle de maintenance suivant.- Si vous devez définir des alarmes qui se déclenchent en mode Sommeil, utilisez
setAndAllowWhileIdle()
ousetExactAndAllowWhileIdle()
- Alarmes définies avec
setAlarmClock()
continuent de se déclencher normalement. Le système quitte le mode Sommeil peu de temps avant que ces les alarmes se déclenchent.
- Si vous devez définir des alarmes qui se déclenchent en mode Sommeil, utilisez
- N'effectue pas de recherches Wi-Fi.
- Il ne permet pas l'exécution des adaptateurs de synchronisation.
- Ne permet pas
JobScheduler
exécuter.
Checklist pour la fonctionnalité Sommeil
- Si possible, utilisez Firebase Cloud Messaging (FCM) pour les flux de données en aval. messagerie.
- Si vos utilisateurs doivent voir une notification immédiatement, utilisez un <ph type="x-smartling-placeholder"></ph> Message à priorité élevée FCM N'utiliser la priorité élevée que pour les messages qui renvoient dans une notification. Pour en savoir plus, consultez de FCM sur la priorité des messages pour Android.
- Fournissez suffisamment d'informations dans le message initial de charge utile, de sorte qu'un accès réseau ultérieur n'est pas nécessaire.
- Définissez des alarmes critiques avec
setAndAllowWhileIdle()
etsetExactAndAllowWhileIdle()
- Testez votre application dans 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 être capables de 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. <ph type="x-smartling-placeholder">
- 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:
- La plupart des applications peuvent appeler un intent contenant le
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
- Applications répondant à un cas d'utilisation autorisé
vous pouvez appeler un intent contenant
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
d'intent qui permet à l'utilisateur d'ajouter directement l'application à la liste des exceptions, sans accéder aux paramètres système.
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:
- Configurer un appareil matériel ou virtuel avec Android 6.0 (API) (niveau 23) ou une image système ultérieure.
- Connectez l'appareil à votre ordinateur de développement et installez votre application.
- Exécutez votre application et laissez-la active.
- Forcez le système en mode inactif en exécutant la commande suivante:
$ adb shell dumpsys deviceidle force-idle
- Lorsque vous êtes prêt, quittez le mode inactif en exécutant la commande suivante:
$ adb shell dumpsys deviceidle unforce
- Réactivez l'appareil en exécutant la commande suivante:
$ adb shell dumpsys battery reset
- 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:
- Configurer un appareil matériel ou virtuel avec Android 6.0 (API) (niveau 23) ou une image système ultérieure.
- Connectez l'appareil à votre ordinateur de développement et installez votre application.
- Exécutez votre application et laissez-la active.
- 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
- Simulez l'activation de l'application à l'aide des commandes suivantes:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- 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é |