Я использую WorkManager -> PeriodicWorkRequest для настройки периодической фоновой синхронизации базы данных с сервером.
val workManager = WorkManager.getInstance()
val syncFileWork = PeriodicWorkRequestBuilder<FileSyncWorker>(
intervalInMins,
TimeUnit.MINUTES,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS,
TimeUnit.MILLISECONDS
)
.setInputData(mapOf(KEY_FROM_PERIODIC_SYNC to true).toWorkData())
.addTag("PeriodicSyncRequest")
.build()
workManager
?.enqueueUniquePeriodicWork("PeriodicSyncRequest", ExistingPeriodicWorkPolicy.REPLACE, syncFileWork)
Этот бит работает нормально.
Я отдельно использую OneTimeWorkRequest
для синхронизации с сервером, когда пользователь выполняет, скажем, обновление по запросу:
val workManager = WorkManager.getInstance()
val syncFileWork = OneTimeWorkRequestBuilder<FileSyncWorker>()
.addTag("SyncRequest")
.build()
workManager
?.beginUniqueWork("ManualSync", ExistingWorkPolicy.KEEP, syncFileWork)
?.enqueue()
Это тоже отлично работает.
Теперь я хочу использовать периодический запрос вместо одноразового запроса. Моя основная причина заключается в том, чтобы не выполнять двойную синхронизацию, когда периодический запрос запускается сразу после того, как пользователь выполнил синхронизацию вручную.
Есть ли способ вызвать PeriodicWorkRequest
из кода, чтобы я мог заменить OneTimeWorkRequest
вызовом PeriodicWorkRequest
.