从代码触发 PeriodicWorkRequest

Trigger a PeriodicWorkRequest from code

我正在使用 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,这样我就可以用调用 PeriodicWorkRequest.

来替换 OneTimeWorkRequest

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

相反,请跟踪上次同步,如果最近的同步时间太近,则让您的 PeriodicWorkRequest 跳过同步。