В каком диапазоне будет работать WorkManager, если я установлю его в 09:00? - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно выполнять функцию в 09:00 каждое утро. Я знаю о AlarmManager, но я хочу использовать WorkManager. В каком диапазоне будет работать этот код? + - 10 минут? кто-нибудь пробовал это? Я не использую никаких ограничений.

1 Ответ

1 голос
/ 29 апреля 2019

Если вам нужно запустить свою работу ровно в 9:00, WorkManager может оказаться не лучшим вариантом для вас.

Период, установленный в WorkManager, для периодического работника это минимальное значение, однако, если устройство находится в режиме ожидания, ваша работа не будет выполняться до следующего окна выполнения. Учитывая, что вы не можете указать время дня для выполнения вашей работы, а только интервал (скажем, 24 часа). Время выполнения Работы будет меняться день за днем.

Таким образом, на данный момент простой PeriodicWorkRequest может быть не лучшим вариантом для вашего варианта использования.

Альтернативой является использование OneTimeWorkRequest, который сам планирует на следующий день, используя начальный день, который вы вычисляете в своем Worker:

class DailyWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) 
{
    override fun doWork(): Result {
        // Do Something

        val now = LocalTime.now()
        val nineAM = LocalTime.parse("09:00:00")
        val timeDiff = Duration.ofHours(24).minus(Duration.between(nineAM, now))
        val dailyWorkRequest = OneTimeWorkRequestBuilder<DailyWorker>()
                .setInitialDelay(timeDiff)
                .addTag(TAG_OUTPUT)
                .build()
        WorkManager.getInstance(applicationContext).enqueue(dailyWorkRequest)

        return Result.success()
    }
}
...