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

时间:2017-02-27 21:19:55

标签: android firebase firebase-cloud-messaging gcm-network-manager firebase-job-dispatcher

我使用的是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);
            }

1 个答案:

答案 0 :(得分:0)

要执行此操作,您需要使onStartJob中的DemoJobService.class使用保存在SharedPrefs /其他位置(示例中的form.tag.get())的标签自行取消:< / p>

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

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