Зачем использовать функцию SetInitialDelay () OneTimeWorkRequest в WorkManager, задержка не применяется при изменении времени устройства - PullRequest
0 голосов
/ 30 августа 2018

Я бы хотел использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...