更改 Firebase JobDispatcher 中定期任务的周期?



我正在使用GCM网络管理器,但后来我听说Firebase JobDispatcher包括GCM和其他功能,所以我正在尝试使用它。 我已经成功地编写了一个定期任务并且它工作正常,但问题是我需要更改时间段而不是从一开始就修复。

原因是,我正在使用活动识别服务,我希望下次 JobDispatcher 执行定期任务时基于检测到的当前活动。例如,如果你在走路,下一次触发任务是在 30 分钟后,而如果你在车里,那么时间段是 5 分钟(主要是因为如果你在车里,你的手机更有可能在短时间内提供不同的位置值与步行相比)。

这是我对定期任务进行编程的方式,如您所见,我正在设置一个固定值,我想知道此任务触发的服务是否可以提供将更改任务周期的反馈。

final Builder builder = jobDispatcher.newJobBuilder()
.setTag(form.tag.get())
.setRecurring(form.recurring.get())
.setLifetime(form.persistent.get() ? Lifetime.FOREVER : Lifetime.UNTIL_NEXT_BOOT)
.setService(DemoJobService.class)
.setTrigger(Trigger.executionWindow(
form.getWinStartSeconds(), form.getWinEndSeconds()))
.setReplaceCurrent(form.replaceCurrent.get())
.setRetryStrategy(jobDispatcher.newRetryStrategy(
form.retryStrategy.get(),
form.getInitialBackoffSeconds(),
form.getMaximumBackoffSeconds()));
if (form.constrainDeviceCharging.get()) {
builder.addConstraint(Constraint.DEVICE_CHARGING);
}
if (form.constrainOnAnyNetwork.get()) {
builder.addConstraint(Constraint.ON_ANY_NETWORK);
}
if (form.constrainOnUnmeteredNetwork.get()) {
builder.addConstraint(Constraint.ON_UNMETERED_NETWORK);
}

为此,您需要使用保存在SharedPrefs/其他地方的标签(示例中form.tag.get())DemoJobService.class取消您的onStartJob

FirebaseJobDispatcher(GooglePlayDriver(context)).cancel(yourTag)

然后,它可以使用更新的参数重新计划作业。不幸的是,目前无法编辑作业,必须取消并重新创建作业!

最新更新