Choisir la bonne API pour maintenir l'appareil allumé

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 de passer en mode veille. Dans certains cas, l'application peut avoir besoin de garder l'écran allumé pendant son fonctionnement. Dans d'autres cas, l'application n'a pas besoin de maintenir l'écran allumé, mais a toujours besoin que le processeur soit actif.

L'approche que vous adoptez dépend des besoins de votre application. Toutefois, une règle générale est que 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 en éveil dépend des besoins de votre application. Cette section vous aidera à choisir l'approche appropriée.

Organigramme récapitulatif pour choisir la bonne approche pour maintenir l'appareil en éveil. Le contenu de l'organigramme est développé dans le texte suivant.

  • Votre application a-t-elle besoin de garder l'écran allumé ?
    • Si la réponse est Oui, consultez Laisser l'écran allumé. Il peut exister une API à usage spécifique qui fait ce dont vous avez besoin. Par exemple, si vous implémentez une UI d'appel téléphonique, vous pouvez utiliser le framework Android Telecom, qui maintient l'écran allumé si nécessaire. S'il n'existe pas d'API à usage spécifique pour votre situation, vous pouvez utiliser l'API keepScreenOn.
  • Votre application exécute-t-elle un service de premier plan et devez-vous maintenir l'appareil en éveil 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 en veille. Si l'utilisateur interagit activement avec l'application, l'appareil reste en veille. 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 veille si nécessaire. Si vous avez simplement besoin de 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, commencez par vérifier que vous avez réellement besoin d'utiliser un service de premier plan. Selon votre situation, il peut exister des API à usage spécifique que vous pouvez utiliser pour répondre à vos besoins au lieu d'un service de premier plan. Pour en savoir plus, consultez 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.
  • L'expérience utilisateur serait-elle affectée si l'appareil se met en veille alors que le service de premier plan est en cours d'exécution et que l'écran de l'appareil est éteint ? (Par exemple, si vous utilisez un service de premier plan pour mettre à jour les notifications, l'expérience utilisateur ne sera pas mauvaise 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 l'état de 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 verrouillage de réveil en votre nom, comme indiqué dans Actions qui maintiennent l'appareil en éveil.

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 verrouillage de réveil. Les actions et API suivantes maintiennent l'appareil en éveil pour vous.

  • Si vous lisez de l'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 ou DownloadManager, le système ou la bibliothèque acquiert un wakelock attribué à votre application.
  • 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 d'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 sortie de veille, appelez Sensor.isWakeUpSensor.
  • Si vous programmez une alarme, l'appareil se réveille lorsque l'alarme se déclenche, même si votre application n'est pas en cours d'exécution.

Voir aussi