Выполнять задачу каждую секунду с помощью 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 минут, после чего рабочий останавливается.

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

Если вы хотите выполнять фоновые задачи в течение более длительных периодов времени, лучше избегать этого.