Я хочу синхронизировать БД с данными сервера один раз в день, и как лучше всего поставить работу в очередь, чтобы она выполнялась только один раз в день?WorkManager, похоже, не волнует, находится ли следующий вызов в очереди в repeatInterval.Если я помещаю работу по постановке в очередь в класс Application, и если эта работа завершена, WorkManager запустит ее снова, если я закрою и открою приложение.
Означает ли это, что мне всегда нужно проверять, поставлена ли работа в очередь передзвонить 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())
ОБНОВЛЕНИЕ:
Одна вещь, которую я забыл упомянуть, это то, что внутри моего работника я всегда возвращаю Result.success()
.Поэтому, если по какой-то причине работа не удалась, WorkManager попытается повторить ее на следующей итерации.