WorkManager setRequiresDeviceIdle сбивает с толку - PullRequest
0 голосов
/ 18 февраля 2019

Я реализовал плановую работу менеджера.Моя идея - завершать процесс каждые 2 часа.Но мне нужно гарантированное исполнение.Согласно документации диспетчера работ, каждый поставленный в очередь процесс будет выполняться гарантированно.

Но теперь этот setRequiresDeviceIdle вводит меня в заблуждение.В документации указано, что по умолчанию setRequiresDeviceIdle имеет значение false .Итак, я предположил, что мой процесс не будет работать, если устройство находится в режиме ожидания .

И Режим ожидания = Когда телефон выключен на некоторый интервал .

Но если я установлю это setRequiresDeviceIdle в true .Я предполагаю, что теперь он будет работать только тогда, когда устройство находится в режиме ожидания .

Я хочу, чтобы процесс был завершен, даже если устройство находится в режиме ожидания или не находится в режиме ожидания.Что мне теперь делать?

1 Ответ

0 голосов
/ 20 февраля 2019

При просмотре документов WorkManager вы найдете:

requiredDeviceIdle логический : true если устройство должно бездействовать для выполнения работы

Если вы передадите true, это означает, что ваша работа будет выполнена только , когда устройство находится в idle state.

Как вы упоминаете, вы хотите, чтобы ваша задача выполнялась всегда.Следовательно, вы должны передать false в setRequiresDeviceIdle().

Примечание: не обязательно, что ваша задача будет выполнена ровно через 2 часа.Согласно DOCS ваша задача может быть отложена до следующего maintenance window.Ваша задача будет выполнена наверняка, но продолжительность не будет точно 2 часа.Это может быть немного больше.

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

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

Если вы не хотите, чтобы ваша задача выполнялась всегда и в точное время, выможно использовать Alarm Manager и setExactAndAllowWhileIdle(). Но эта практика не рекомендуется, так как она не подходит для работы от батареи.

...