如果我将它设置为 09:00,那么 运行 WorkManager 会在哪个范围内?
In which range will run WorkManager if I set it at 09:00?
我需要每天早上在 09:00 执行功能。我知道 AlarmManager,但我想使用 WorkManager。 运行这段代码会在哪个范围内?
+- 10 分钟?有人试过吗?我不使用任何约束。
如果您需要 运行 您的工作正好 9:00AM,WorkManager 可能不是您的最佳选择。
您在 WorkManager 中设置的 Period,对于周期性 Worker,这是一个最小值,但是,如果设备处于打瞌睡模式,您的工作将不会 运行 直到下一次执行 window。
鉴于您无法为 运行 您的工作指定一天中的某个时间,而只能指定一个时间间隔(假设为 24 小时)。 Work执行的时间一天比一天慢
因此,就目前而言,普通的 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()
}
}
我需要每天早上在 09:00 执行功能。我知道 AlarmManager,但我想使用 WorkManager。 运行这段代码会在哪个范围内? +- 10 分钟?有人试过吗?我不使用任何约束。
如果您需要 运行 您的工作正好 9:00AM,WorkManager 可能不是您的最佳选择。
您在 WorkManager 中设置的 Period,对于周期性 Worker,这是一个最小值,但是,如果设备处于打瞌睡模式,您的工作将不会 运行 直到下一次执行 window。 鉴于您无法为 运行 您的工作指定一天中的某个时间,而只能指定一个时间间隔(假设为 24 小时)。 Work执行的时间一天比一天慢
因此,就目前而言,普通的 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()
}
}