Я хочу запускать периодическую задачу сразу после завершения процесса, а затем запускать периодическую ежедневную задачу. Я знаю, как запускать периодическую задачу, но мой вопрос в том, что мне нужно запускать эту периодическую задачу немедленно, ровно один раз, и после этого регулярная периодическая задача должна выполняться ежедневно. В настоящее время мне нужно подождать 1 день, чтобы выполнить периодическую задачу. Как я могу это сделать?
Запускать работу непосредственно перед запуском периодической задачи - WorkManager
Ответы (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