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

Posted

技术标签:

【中文标题】在 Firebase JobDispatcher 中更改定期任务的周期?【英文标题】:Change the period of a periodic task in Firebase JobDispatcher? 【发布时间】:2017-07-18 16:03:54 【问题描述】:

我使用的是 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】:

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

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

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

【讨论】:

以上是关于在 Firebase JobDispatcher 中更改定期任务的周期?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 Firebase JobDispatcher

如何在 Firebase JobDispatcher 中设置周期性任务的周期?

Firebase Jobdispatcher - 现在开始并重复

在 Firebase JobDispatcher 和 AlarmManager 之间进行选择时感到困惑

为啥 Firebase JobDispatcher 运行 JobService 2 次?