Запускать работу непосредственно перед запуском периодической задачи - WorkManager

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


person Avi Patel    schedule 29.04.2019    source источник


Ответы (1)


Лучше всего использовать OneTimePeriodicWorker, который планирует вашего периодического Worker перед возвратом Result.success().

Итак, вы ставите WorkRequest в очередь для немедленного запуска:

val asSoonAsPossibleWorkRequest = OneTimeWorkRequestBuilder<InitialWorker>
                .addTag(TAG_OUTPUT)
                .build()

WorkManager.getInstance(context).enqueue(asSoonAsPossibleWorkRequest)

и ваш Worker просто ставит периодический Worker в очередь перед возвратом Result.success():

class InitialWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) {

   override fun doWork(): Result {
       // Do Something Useful

       // Enqueue the periodic Worker
       val dailyWorkRequest = PeriodicWorkRequestBuilder<DailyWorker>(1, TimeUnit.DAYS)
               .addTag(TAG_OUTPUT)
               .build()
       WorkManager.getInstance(applicationContext).enqueue(dailyWorkRequest)

       return Result.success()
   }
}
person pfmaggi    schedule 29.04.2019