Как Android продолжает работать в фоновом режиме — механизм блокировки пробуждения
Как Android продолжает работать в фоновом режиме — механизм блокировки пробуждения

Предисловие

В настоящее время становится все сложнее обеспечить выживание на Android, но Android предоставляет механизм блокировки пробуждения, который может гарантировать, что процессор никогда не перейдет в режим сна, но цена — высокое энергопотребление. Этот механизм в основном используется в некоторых особых сценариях, например, в музыкальных приложениях, воспроизводящих музыку в фоновом режиме, что требует использования блокировки пробуждения для обеспечения непрерывного воспроизведения. Поэтому обычным приложениям следует стараться избегать этого. Конечно, если мы разрабатываем собственные гаджеты или используем приложения внутри предприятия, мы все равно можем их использовать.

Давайте посмотрим, как использовать эту блокировку пробуждения.

Использовать блокировку пробуждения

Сначала вам нужно добавить разрешения в AndroidManifest.xml.

Язык кода:javascript
копировать
android.permission.WAKE_LOCK

Затем используйте PowerManagerService, чтобы создать блокировку пробуждения и включить ее. Код выглядит следующим образом:

Язык кода:javascript
копировать
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager 
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "$packageName:wake") 
wakeLock?.acquire()

Таким образом, активируется блокировка пробуждения, и процессор остается в активном состоянии. Чтобы избежать ненужного энергопотребления, блокировку пробуждения необходимо снимать, когда она не нужна.

Язык кода:javascript
копировать
wakeLock?.release()

Метод получения WakeLock также поддерживает передачу тайм-аута, поэтому по истечении тайм-аута блокировка пробуждения будет автоматически снята, чтобы предотвратить невозможность снятия ситуации и потребление энергии.

Язык кода:javascript
копировать
wakeLock?.acquire(10 * 60 * 1000L)

Блокировка пробуждения автоматически отключится через десять минут.

уровень и флаг

Выше мы используем функцию newWakeLock PowerManagerService для создания блокировки пробуждения. Эта функция имеет два параметра. Второй параметр — это тег, который идентифицирует блокировку пробуждения и представляет собой пользовательскую строку; первый параметр — levelAndFlags, что очень важно. сосредоточиться на

level

Существует четыре уровня:

  • PARTIAL_WAKE_LOCK: позволяет отключить подсветку экрана и клавиатуры, и процессор никогда не переходит в режим сна.
  • FULL_WAKE_LOCK: ЦП не переходит в спящий режим, когда подсветка экрана и клавиатуры всегда включена. Если подсветка выключена, блокировка снимается.
  • SCREEN_DIM_WAKE_LOCK: ЦП не переходит в режим сна, когда экран включен (и экран тускнеет), что позволяет отключить подсветку клавиатуры. Снимите блокировку, если экран выключен
  • SCREEN_BRIGHT_WAKE_LOCK: ЦП не переходит в режим сна, когда экран включен (за исключением затемнения экрана), что позволяет отключить подсветку клавиатуры. Снимите блокировку, если экран выключен или затемнен.

Только один из этих четырех уровней может существовать и являются взаимоисключающими.

Это включает в себя процесс спящего режима устройств Android. Если оно не используется в течение длительного времени, сначала экран тускнеет, затем через некоторое время экран выключается, а затем через некоторое время отключается процессор.

Поэтому, когда выше упоминается, что при включении экрана будет конкретно указано, включает ли оно затемнение экрана. Например, SCREEN_BRIGHT_WAKE_LOCK снимет блокировку пробуждения, когда экран погаснет.

flag

Есть два флага:

  • ACQUIRE_CAUSES_WAKEUP: всегда держать экран включенным, когда активирована блокировка пробуждения процессора, нельзя использовать одновременно с PARTIAL_WAKE_LOCK.
  • ON_AFTER_RELEASE: когда блокировка пробуждения процессора снята, экран будет оставаться включенным некоторое время вместо немедленной блокировки. Его нельзя использовать одновременно с PARTIAL_WAKE_LOCK.

Флаги здесь не являются взаимоисключающими и могут быть установлены одновременно.

Таким образом, параметр levelAndFlags может быть отдельным уровнем, например «PowerManager.PARTIAL_WAKE_LOCK»;

Он также может быть в форме «уровень | флаг», например «PARTIAL_WAKE_LOCK | ON_AFTER_RELEASE»;

Он также может быть в форме «уровень | флаг1 | флаг2», например «PARTIAL_WAKE_LOCK | ON_AFTER_RELEASE | ON_AFTER_RELEASE».

Подвести итог

Наконец, я все же хочу напомнить всем, что Использовать блокировку пробуждения Обязательно выпустите,В противном случае время ожидания мобильного телефона сократится. Также не злоупотребляйте этим механизмом.,Особенно теперь система Android будет предлагать пользователям использовать приложения с высоким энергопотреблением.,Это принесет очень плохой опыт пользователям.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода