Choisir la bonne API pour maintenir l'appareil allumé
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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.
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.
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 le service 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 ou DownloadManager, le système ou la bibliothèque acquiert un wakelock attribué à votre application.
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, appelez Sensor.isWakeUpSensor.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/26 (UTC).
[null,null,["Dernière mise à jour le 2025/07/26 (UTC)."],[],[],null,["# Choose the right API to keep the device awake\n\nWhen the user leaves their Android-powered device idle, it quickly goes into the\nsuspend state to avoid draining the battery. However, there are times when an\napp needs to prevent the CPU from going to the suspend state. In some cases, the\napp may need to keep the screen on while it's working. In other cases, the app\ndoesn't need to keep the screen on but still needs the CPU to be active.\n\nThe approach you take depends on the needs of your app. However, a general rule\nis that you should use the most lightweight approach possible, to minimize your\napp's impact on system resources. This document helps you choose the correct\nAndroid technology for your situation.\n| **Note:** You may be familiar with **wake locks**. An app can set a wake lock to keep the device from suspending. However, using a wake lock can quickly drain the device battery. You should only use a wake lock if there's no other option that will do what you need. If you do use a wake lock, you should release it as soon as possible.\n\nChoose the right technology\n---------------------------\n\nThe best option for keeping your device awake depends on your app's needs. This\nsection helps you choose the right approach.\n\n- Does your app need to keep the screen on?\n - If **Yes** , see [Keep the screen on](/develop/background-work/background-tasks/awake/screen-on). There may be a special-purpose API that does what you need; for example, if you're implementing a phone-call UI, you can use the [Android telecom\n framework](/reference/android/telecom/package-summary), which keeps the screen on when needed. If there's no special purpose API for your situation, you can use the `keepScreenOn` API.\n- Is your app running a foreground service, and you need to keep the device awake when screen is off while the service is running?\n - If **No** , you do not need to keep the device awake. If the user is actively interacting with the app, the device will stay awake. If the user is not interacting with your app and you are not running a foreground service, you should let the device go into suspend mode when necessary. If you just need to make sure some work gets done while the user is away from the app, see the [background tasks](/develop/background-work/background-tasks) documentation to find the best option.\n - If **Yes** , first confirm that you actually need to use a foreground service. Depending on your situation, there may be some special-purpose API you can use to accomplish your need instead of a foreground service. You can find information about these [in the Foreground Service\n documentation](/develop/background-work/services/fgs/service-types). For example, if you need to track the user's location, you might be able to use the [geofencing API](/develop/sensors-and-location/location/geofencing) instead of a `location` foreground service.\n- Would it be detrimental to the user experience if the device suspends while the foreground service is running and the device screen is off? (For example, if you're using a foreground service to update notifications, it wouldn't be a bad user experience if the device is suspended.)\n - If **No**, do not use a wakelock. The action resumes automatically once the user engages with their device, which takes it out of suspend.\n - If **Yes** , you might need to [use a wake lock](/develop/background-work/background-tasks/awake/wakelock). However, you should still check to see if you're already using an API or doing an action that declares a wake lock on your behalf, as discussed in [Actions that keep the device awake](#actions-keep).\n\nActions that keep the device awake\n----------------------------------\n\nIf your app is doing any of the following, you don't need to set a wake lock\nyourself. The following actions and APIs all keep the device awake for you.\n\n- If you're playing audio, the audio system sets and manages a wake lock for you; you don't need to do it yourself.\n- If you're using task scheduling APIs or libraries such as [WorkManager](/develop/background-work/background-tasks/persistent), [`JobScheduler`](/reference/android/app/job/JobScheduler), or [`DownloadManager`](/reference/android/app/DownloadManager), the system or library acquires a wake lock that is attributed to your app.\n- If you're using [Media3 ExoPlayer](/media/media3/exoplayer), you can use [`ExoPlayer.setWakeMode()`](/reference/androidx/media3/exoplayer/ExoPlayer#setWakeMode(int)) to have the player set a wake lock for you.\n- Certain device sensors are wake-up sensors; you can use [`SensorManager`](/reference/android/hardware/SensorManager) to have those sensors wake up the device when they have data to report. To check if a sensor is a wake-up sensor, call [`Sensor.isWakeUpSensor`](/reference/android/hardware/Sensor#isWakeUpSensor())).\n\nSee also\n--------\n\n- [Use wake locks](/develop/background-work/background-tasks/awake/wakelock)\n- [Keep the screen on](/develop/background-work/background-tasks/awake/screen-on)"]]