我想使用 WorkManager 从午夜开始每 24 小时更新一次数据库。
首先,我了解到 Workmanager 的PeriodicWorkRequest 并未指定工作人员应在任何给定时间进行操作。
因此,我使用 OneTimeWorkRequest() 给出延迟,然后将PeriodicWorkRequest() 放入队列中,该队列每 24 小时运行一次。
1.限制条件
private fun getConstraints(): Constraints {
return Constraints.Builder()
.setRequiredNetworkType(NetworkType.NOT_REQUIRED)
.build()
}
2.一次性工作请求
fun applyMidnightWorker() {
val onTimeDailyWorker = OneTimeWorkRequest
.Builder(MidnightWorker::class.java)
.setInitialDelay(getDelayTime(), TimeUnit.SECONDS)
.setConstraints(getConstraints())
.build()
val workerContinuation =
workManager.beginUniqueWork(Const.DAILY_WORKER_TAG,
ExistingWorkPolicy.KEEP,
onTimeDailyWorker)
workerContinuation.enqueue()
}
getDelayTime() 是
private fun getDelayTime(): Long {
...
return midNightTime - System.currentTimeMillis()
}
3.午夜工人班
class MidnightWorker : Worker() {
override fun doWork(): Result {
DailyWorkerUtil.applyDailyWorker()
return Worker.Result.SUCCESS
}
}
4.定期工作请求
fun applyDailyWorker() {
val periodicWorkRequest = PeriodicWorkRequest
.Builder(DailyWorker::class.java, 24, TimeUnit.HOURS)
.addTag(Const.DAILY_WORKER)
.setConstraints(getConstraints()).build()
workManager.enqueue(periodicWorkRequest)
}
我确认delayTime过去了并且midnightWorker正在运行。
当然,一切正常,与网络无关。
然而,测试结果表明,无论设备时间如何,延迟时间都有效。就像是服务器时间一样
这是我的问题。
1、根据设备时间不存在延迟。我想知道延迟是否符合服务器时间标准。
2.我想知道PeriodicWorkRequest是否可以像OneTimeWorkRequest一样提供InitialDelay。