代码之家  ›  专栏  ›  技术社区  ›  Adi B

从代码触发PeriodicWorkrequest

  •  0
  • Adi B  · 技术社区  · 6 年前

    我正在使用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 从代码中,所以我可以替换 一次性工作请求 打电话给 周期工作请求 .

    1 回复  |  直到 6 年前
        1
  •  1
  •   CommonsWare    6 年前

    我想不起来了,对不起。

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