0

我正在使用 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)

这一点工作正常。

当用户执行拉动刷新时,我分别使用 aOneTimeWorkRequest与服务器同步:

    val workManager = WorkManager.getInstance()

    val syncFileWork = OneTimeWorkRequestBuilder<FileSyncWorker>()
            .addTag("SyncRequest")
            .build()

    workManager
            ?.beginUniqueWork("ManualSync", ExistingWorkPolicy.KEEP, syncFileWork)
            ?.enqueue()

这也很好。

现在我也想使用周期性请求来代替一次性请求。我的主要原因是在用户手动同步后立即触发定期请求时不进行双重同步。

有没有办法触发PeriodicWorkRequestfrom 代码,所以我可以用OneTimeWorkRequest调用来替换PeriodicWorkRequest.

4

1 回答 1

1

我不记得这是一个选项,抱歉。

相反,请跟踪上次同步,PeriodicWorkRequest如果最近的同步太新,请跳过同步。

于 2018-07-09T22:20:15.227 回答