Выполнять задачу каждую секунду с помощью API Work Manager
Work Manager - это новый API, и я пытаюсь выполнить задачу каждую секунду, но это не работает.
Это мой рабочий класс
class TestingWorker : Worker(){
override fun doWork(): Result {
Log.i("CheckWorker","Result here")
return Result.SUCCESS
}
}
и именно там я его назвал.
val recurringWork: PeriodicWorkRequest = PeriodicWorkRequest.Builder(TestingWorker::class.java, 1, TimeUnit.SECONDS).build()
WorkManager.getInstance()?.enqueue(recurringWork)
Ответы
Ответ 1
Он не работает, потому что минимальный интервал между двумя периодическими запросами на работу составляет 15 минут, который определяется MIN_PERIODIC_INTERVAL_MILLIS.
Основываясь на , long, java.util.concurrent.TimeUnit) rel=noreferrer>документации:
Создает PeriodicWorkRequest для периодического запуска один раз в каждый интервал. Гарантируется, что PeriodicWorkRequest будет работать ровно один раз в течение этого интервала. ИнтервалMillis должен быть больше или равен PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS. Он может запускаться немедленно, в конце периода, или в любое время между ними, пока другие условия удовлетворяются в то время.
Я бы рекомендовал вам часто не планировать работу с расписанием. Это приведет к потреблению большего количества ресурсов и, в конечном итоге, к сокращению времени автономной работы.
Ответ 2
WorkManager не предназначен для запуска задач каждую секунду, так как у него есть два варианта для создания рабочего запроса, который и
PeriodicWorkRequest
- повторное задание запускается каждые 15 минут, даже если мы изменим временной интервал на anyhwere & lt; 15 минут по умолчанию будет работать только 15 минут.
OneTimeWorkRequest
- запускается один раз
WorkManager поставит в очередь рабочие запросы, вызовет соответственно классы Worker для запуска задачи, где каждый рабочий класс переопределяет doWork()
, где определена фактическая задача.
Этот метод выполняется в фоновом потоке и работает в течение 10 минут, после чего рабочий останавливается.
Поэтому, если вы хотите планировать выполнение задач каждую секунду, лучше запускать службу переднего плана или если вы выполняете задачи в течение короткого времени.
Если вы хотите выполнять фоновые задачи в течение более длительных периодов времени, лучше избегать этого.