Я бы хотел использовать WorkManager для обновления БД каждые 24 часа с полуночи.
Во-первых, я понимаю, что в PeriodicWorkRequest Workmanager не указано, что работник должен работать в любой момент времени.
Поэтому я использовал OneTimeWorkRequest (), чтобы задать задержку, а затем поместил PeriodicWorkRequest () в очередь, которая выполняется каждые 24 часа.
1.Constraints
private fun getConstraints(): Constraints {
return Constraints.Builder()
.setRequiredNetworkType(NetworkType.NOT_REQUIRED)
.build()
}
2.OneTimeWorkRequest
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.MidnightWorker Class
class MidnightWorker : Worker() {
override fun doWork(): Result {
DailyWorkerUtil.applyDailyWorker()
return Worker.Result.SUCCESS
}
}
4.PeriodicWorkRequest
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 предоставить InitialDelay, например OneTimeWorkRequest.