Lorsque l'utilisateur laisse son appareil Android inactif, il passe rapidement en état de suspension pour éviter de décharger la batterie. Toutefois, il arrive qu'une application doive empêcher le processeur d'entrer en état de suspension. Dans certains cas, l'application peut devoir maintenir l'écran allumé pendant son fonctionnement. Dans d'autres cas, l'application n'a pas besoin de maintenir l'écran allumé, mais le processeur doit rester actif.
L'approche que vous adoptez dépend des besoins de votre application. Toutefois, en règle générale, vous devez utiliser l'approche la plus légère possible pour minimiser l'impact de votre application sur les ressources système. Ce document vous aide à choisir la technologie Android adaptée à votre situation.
Choisir la bonne technologie
La meilleure option pour maintenir votre appareil allumé dépend des besoins de votre application. Cette section vous aide à choisir la bonne approche.
- Votre application doit-elle maintenir l'écran allumé ?
- Si la réponse est Oui, consultez Laisser l'écran allumé. Il peut exister une API à usage spécial qui répond à vos besoins. Par exemple, si vous implémentez une UI d'appel téléphonique, vous pouvez utiliser le framework télécom Android, qui maintient l'écran allumé si nécessaire. Si aucune API à usage spécial n'est disponible pour votre situation, vous pouvez utiliser l'API
keepScreenOn
.
- Si la réponse est Oui, consultez Laisser l'écran allumé. Il peut exister une API à usage spécial qui répond à vos besoins. Par exemple, si vous implémentez une UI d'appel téléphonique, vous pouvez utiliser le framework télécom Android, qui maintient l'écran allumé si nécessaire. Si aucune API à usage spécial n'est disponible pour votre situation, vous pouvez utiliser l'API
- Votre application exécute-t-elle un service de premier plan et devez-vous maintenir l'appareil allumé lorsque l'écran est éteint pendant l'exécution du service ?
- Si la réponse est Non, vous n'avez pas besoin de maintenir l'appareil allumé. Si l'utilisateur interagit activement avec l'application, l'appareil reste allumé. Si l'utilisateur n'interagit pas avec votre application et que vous n'exécutez pas de service de premier plan, vous devez laisser l'appareil passer en mode suspension si nécessaire. Si vous devez simplement vous assurer que certaines tâches sont effectuées lorsque l'utilisateur n'est pas dans l'application, consultez la documentation sur les tâches en arrière-plan pour trouver la meilleure option.
- Si la réponse est Oui, vérifiez d'abord que vous avez réellement besoin d'utiliser un service de premier plan. Selon votre situation, il est possible que vous puissiez utiliser une API à usage spécial pour répondre à vos besoins au lieu d'un service de premier plan.
Vous trouverez des informations à ce sujet dans la documentation sur les services de premier plan. Par exemple, si vous devez suivre la position de l'utilisateur, vous pouvez utiliser l'API Geofencing au lieu d'un service de premier plan
location
.
- La suspension de l'appareil pendant l'exécution du service de premier plan et lorsque l'écran de l'appareil est éteint serait-elle préjudiciable à l'expérience utilisateur ? (Par exemple, si vous utilisez un service de premier plan pour mettre à jour les notifications, ce ne sera pas une mauvaise expérience utilisateur si l'appareil est suspendu.)
- Si la réponse est Non, n'utilisez pas de wakelock. L'action reprend automatiquement une fois que l'utilisateur interagit avec son appareil, ce qui le sort de la suspension.
- Si la réponse est Oui, vous devrez peut-être utiliser un wakelock. Toutefois, vous devez toujours vérifier si vous utilisez déjà une API ou si vous effectuez une action qui déclare un wake lock en votre nom, comme indiqué dans la section Actions qui maintiennent l'appareil éveillé.
Actions qui maintiennent l'appareil activé
Si votre application effectue l'une des actions suivantes, vous n'avez pas besoin de définir vous-même un wake lock. Les actions et API suivantes permettent de maintenir l'appareil allumé.
- Si vous lisez du contenu audio, le système audio définit et gère un verrouillage de réveil pour vous. Vous n'avez pas besoin de le faire vous-même.
- Si vous utilisez des API ou des bibliothèques de planification de tâches telles que WorkManager,
JobScheduler
ouDownloadManager
, le système ou la bibliothèque acquiert un verrouillage de réveil en votre nom. - Si vous utilisez Media3 ExoPlayer, vous pouvez utiliser
ExoPlayer.setWakeMode()
pour que le lecteur définisse un verrouillage de réveil pour vous. - Certains capteurs de l'appareil sont des capteurs de réveil. Vous pouvez utiliser
SensorManager
pour que ces capteurs réveillent l'appareil lorsqu'ils ont des données à signaler. Pour vérifier si un capteur est un capteur de réveil, appelezSensor.isWakeUpSensor
.