首页 > 解决方案 > 在运行周期性任务之前立即运行工作 - WorkManager

问题描述

我想在流程结束后立即运行定期任务,然后运行定期日常任务。我知道如何运行定期任务,但我的问题是我需要立即运行此定期任务一次,并且在该定期定期任务应该每天运行之后。目前我需要等待1天才能执行周期性任务,我该怎么做?

标签: androidandroid-workmanagerperiodic-task

解决方案


最好的选择是使用一个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()
   }
}

推荐阅读