从代码触发PeriodicWorkRequest

时间:2018-07-09 19:33:15

标签: android android-jetpack android-workmanager

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

1 个答案:

答案 0 :(得分:1)

对不起,我不记得是这样。

相反,请跟踪上一次同步,如果最近的同步是最近的,请让PeriodicWorkRequest跳过其同步。