Выберите правильный API, чтобы устройство оставалось в активном состоянии
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Когда пользователь оставляет своё Android-устройство бездействующим, оно быстро переходит в режим ожидания, чтобы избежать разрядки аккумулятора. Однако бывают случаи, когда приложению необходимо предотвратить переход процессора в режим ожидания. В некоторых случаях приложению может потребоваться поддерживать экран включённым во время работы. В других случаях приложению не требуется поддерживать экран включённым, но процессор всё равно должен быть активным.
Выбор подхода зависит от потребностей вашего приложения. Однако общее правило заключается в том, что следует использовать максимально лёгкий подход, чтобы минимизировать влияние приложения на системные ресурсы. Этот документ поможет вам выбрать правильную технологию Android для вашей ситуации.
Выберите правильную технологию
Оптимальный вариант поддержания устройства в спящем режиме зависит от потребностей вашего приложения. Этот раздел поможет вам выбрать правильный подход.
Необходимо ли вашему приложению держать экран включенным?
Если да , см. раздел «Поддержание экрана включённым» . Возможно, существует специализированный API, который выполняет необходимые функции; например, если вы реализуете интерфейс телефонного звонка, вы можете использовать фреймворк Android Telecom , который поддерживает экран включённым при необходимости. Если специализированного API для вашей ситуации нет, можно использовать API keepScreenOn .
Запускает ли ваше приложение службу переднего плана, и вам необходимо, чтобы устройство оставалось в активном состоянии, когда экран выключен, пока работает служба?
Если нет , вам не нужно поддерживать устройство в спящем режиме. Если пользователь активно взаимодействует с приложением, устройство будет оставаться в спящем режиме. Если пользователь не взаимодействует с вашим приложением и вы не запускаете службу переднего плана, вам следует разрешить устройству переходить в режим ожидания при необходимости. Если вам просто нужно убедиться, что какая-то работа выполняется, пока пользователь не работает с приложением, обратитесь к документации по фоновым задачам , чтобы найти оптимальный вариант.
Если да , сначала убедитесь, что вам действительно нужно использовать службу переднего плана. В зависимости от ситуации, вместо службы переднего плана можно использовать специализированный API. Информацию о них можно найти в документации по службе переднего плана . Например, если вам нужно отслеживать местоположение пользователя, вы можете использовать API геозон вместо службы переднего location .
Будет ли отрицательно сказываться на пользовательском опыте, если устройство приостановится во время работы активной службы и при этом экран устройства будет выключен? (Например, если вы используете активную службу для обновления уведомлений, то приостановка работы устройства не будет отрицательной для пользовательского опыта.)
Если «Нет» , не используйте блокировку пробуждения. Действие возобновляется автоматически, как только пользователь взаимодействует со своим устройством, выводя его из режима ожидания.
Действия, которые поддерживают устройство в активном состоянии
Если ваше приложение выполняет что-либо из перечисленного ниже, вам не нужно устанавливать блокировку пробуждения самостоятельно. Следующие действия и API позволяют поддерживать устройство в бодрствующем состоянии.
Если вы воспроизводите аудио, аудиосистема устанавливает и управляет блокировкой спящего режима; вам не нужно делать это самостоятельно.
Если вы используете API-интерфейсы планирования задач или библиотеки, такие как WorkManager , JobScheduler или DownloadManager , система или библиотека получает блокировку пробуждения, которая приписывается вашему приложению.
Некоторые датчики устройства являются датчиками пробуждения; с помощью SensorManager можно настроить эти датчики на пробуждение устройства при наличии данных для передачи. Чтобы проверить, является ли датчик датчиком пробуждения, вызовите Sensor.isWakeUpSensor .
Если вы запланируете будильник , устройство проснется, когда он сработает, даже если ваше приложение не запущено.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-09-08 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-09-08 UTC."],[],[],null,["When 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\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 wake lock. 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\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- If you [schedule an alarm](/develop/background-work/services/alarms), the device wakes up when the alarm goes off, even if your app is not running.\n\nSee also\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)"]]