为什么要使用 WorkManager 的 OneTimeWorkRequest 的 setInitialDelay() 函数,更改设备时间时延迟不适用



我想使用WorkManager从午夜开始每24小时更新一次数据库。

首先,我知道工作管理器的 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)
}

我确认耽搁时间过去了,午夜工人正在奔跑。

当然,它正常工作,与网络没有任何关系。

然而,测试结果表明,无论设备时间如何,延迟时间都有效。好像是服务器时间

这是我的问题。

1.根据设备时间无延迟。我想知道延迟是否按照服务器时间标准工作。

2. 我想知道 PeriodicWorkRequest 是否可以像 OneTimeWorkRequest 一样提供 InitialDelay。

你已经用TimeUnit.SECONDSsetInitialDelaygetDelayTime正在使用毫秒。

这可能是你问题的原因

最新更新