gpt4 book ai didi

Android WorkManager - 如何延迟任务?

转载 作者:行者123 更新时间:2023-12-04 23:36:19 36 4
gpt4 key购买 nike

我正在构建一个功能,允许商家设置他们的业务时间表。这样的功能会自动改变变量 opentruefalse根据商家在一周中的每一天设定的时间。因此,总共有 14 个可能的不同时间。

我正在尝试使用新的 Android 架构组件库 WorkManager 构建一个经常性的后台任务来完成这样的事情。

val scheduleStartWork = PeriodicWorkRequest.Builder(ScheduleWorker::class.java, 7, TimeUnit.DAYS)
.setInputData(Data.Builder().putBoolean("isStart", true).build())
.setScheduleRequestedAt(diff_time, TimeUnit.MILLISECONDS)
.addTag(weekdays[index])
.build()

它给了我以下 APILibraryException 错误:

Builder.setScheduleRequestedAt can only be called from within the same library group



我的问题:

1) 是 setScheduleRequestedAt如果我想通过 diff_time 延迟调度,调用正确的方法?

2)如果是这样,我该如何解决这个问题?

PS: diff_time是与用户设置的每一天的每个相应小时的差异,以毫秒为单位。示例:周一至周五 = 08:00,周六至周日 = 10:00。

最佳答案

更新

WorkManager v2.1-alpha02现在可以为 PeriodicWorkRequest 添加初始延迟.现在你的电话变得简单了:

val scheduleStartWork = PeriodicWorkRequest.Builder(ScheduleWorker::class.java, 7, TimeUnit.DAYS)
.setInputData(Data.Builder().putBoolean("isStart", true).build())
.setInitialDelay(diff_time, TimeUnit.MILLISECONDS)
.addTag(weekdays[index])
.build()

备注 因为 setInitialDelay已在父类中引入, WorkRequest ,这为 OneTimeWorkRequest#setInitialDelay() 引入了从 v2.0 到 v2.1 的二进制更改。方法。这意味着要使用新库,您需要在从 v2.0 升级时重新编译项目。

遵循原始答案

无法使用 WorkManager 延迟定期任务的首次运行。

您最好的选择是使用具有您想要的延迟的 OneTimeWorker,然后您可以从那里将您的周期性工作人员与您想要的时间段一起排队。

There's a feature request on WorkManager's issue tracker with an explanation for this workaround that you can use as a reference.

注:由于最小间隔的工作方式,您无法构建在重复时间执行的定期工作请求,例如每天凌晨 4:00。您可以指定 24 小时的重复间隔,但这可以让工作人员在第一天凌晨 4:05、第二天早上 6:00、第三天早上 6:10 执行,依此类推。
如果您需要每天在同一时间执行工作人员,最好的选择是使用 OneTimeWorkRequest初始延迟:
OneTimeWorkRequest save = new OneTimeWorkRequest
.Builder(SaveImageToFileWorker.class)
.setConstraints(constraints)
.setInitialDelay(24, TimeUnit.HOURS)
.addTag(TAG_OUTPUT)
.build();

当工作人员完成后,您可以使用延迟重新安排它,以便在正确的时间触发它(工作人员将要执行的确切时间取决于您在创建时使用的约束工作要求)。

关于Android WorkManager - 如何延迟任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048327/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com