rgo*_*alv 10 android kotlin android-architecture-components android-workmanager
我正在构建一个功能,允许商家设置他们的业务时间表。这种功能将变量自动改变open到true和false相应时代商家设置在一周中的每一天。因此,总共有 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()
Run Code Online (Sandbox Code Playgroud)
不过,它给了我以下 APILibraryException 错误:
Builder.setScheduleRequestedAt 只能从同一个库组中调用
我的问题:
1)setScheduleRequestedAt如果我想延迟调度,这是正确的调用方法diff_time吗?
2)如果是这样,我该如何解决这个问题?
PS:diff_time是与用户设置的每一天的每个相应小时的差异,以毫秒为单位。示例:周一至周五 = 08:00,周六至周日 = 10:00。
pfm*_*ggi 12
从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()
Run Code Online (Sandbox Code Playgroud)
请注意,因为setInitialDelay已经在父类中WorkRequest引入了 ,这为该方法引入了从 v2.0 到 v2.1 的二进制更改OneTimeWorkRequest#setInitialDelay()。这意味着要使用新库,您需要在从 v2.0 升级时重新编译项目。
不可能使用 WorkManager 延迟周期性任务的第一次运行。
您最好的选择是使用 OneTimeWorker 和您想要的延迟,然后您可以将您的定期工作人员排入您想要的时间。
WorkManager 的问题跟踪器上有一个功能请求,其中包含对此变通方法的说明,您可以将其用作参考。
注意:由于最小间隔的工作方式,您不能构建在重复时间执行的定期工作请求,例如每天凌晨 4:00。您可以指定 24 小时重复间隔,但这可以让工作程序在第一天凌晨 4:05、第二天早上 6:00、第三天早上 6:10 执行,依此类推。如果您需要每天在同一时间执行一个工作程序,最好的选择是使用OneTimeWorkRequest带有初始延迟的 a:
OneTimeWorkRequest save = new OneTimeWorkRequest
.Builder(SaveImageToFileWorker.class)
.setConstraints(constraints)
.setInitialDelay(24, TimeUnit.HOURS)
.addTag(TAG_OUTPUT)
.build();
Run Code Online (Sandbox Code Playgroud)
当工作器完成后,您可以使用 Delay 重新安排它,以便它会在正确的时间被解雇(工作器将被执行的确切时间取决于您在创建时使用的约束)工作要求)。
| 归档时间: |
|
| 查看次数: |
6239 次 |
| 最近记录: |