我希望每天将数据库与服务器数据同步一次,最好的位置来排队工作是什么?以便它只运行一次每天? WorkManager似乎不关心下一个enqueue调用是否在repeatInterval内。如果我将排队工作放在Application类中,并且如果该工作完成,如果我关闭并重新打开应用程序,WorkManager将再次运行它。
这是否意味着我始终需要在调用WorkManager.enqueue()之前检查工作是否已经排队?
这是否意味着我始终需要在调用WorkManager.enqueue()之前检查工作是否已经排队?
val workInfo = workManager.getWorkInfosForUniqueWork("UNIQUE_WORK_NAME").get()?.getOrNull(0)
if (workInfo?.state == WorkInfo.State.ENQUEUED) {
// do nothing
return
}
workManager.enqueueUniquePeriodicWork(
"UNIQUE_WORK_NAME",
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequestBuilder<SyncDbWorker>(
1,
TimeUnit.DAYS
)
.setConstraints(constraints)
.build())
更新:
我忘记提到一件事,那就是在我的Worker内部,我始终会返回Result.success()
。因此,如果工作出现故障,WorkManager将在下一个迭代中重试它。