我有点不确定FirebaseJobDispatcher
(JobScheduler)应该如何工作。当用户失去互联网连接然后再次连接以使我的应用程序运行并进行同步以在重新连接时检查内容更新时,我想要它做什么。
我知道我们不应该使用连接更改广播侦听器并使用 JobScheduler,但似乎 JobScheduler 更像是一个更智能的 AlarmManager,即使没有连接更改(我不需要)它也会在其中运行。
是这种情况还是我误解了它的工作原理?如果没有,是否只有当用户重新连接互联网时才会触发?
我有点不确定FirebaseJobDispatcher
(JobScheduler)应该如何工作。当用户失去互联网连接然后再次连接以使我的应用程序运行并进行同步以在重新连接时检查内容更新时,我想要它做什么。
我知道我们不应该使用连接更改广播侦听器并使用 JobScheduler,但似乎 JobScheduler 更像是一个更智能的 AlarmManager,即使没有连接更改(我不需要)它也会在其中运行。
是这种情况还是我误解了它的工作原理?如果没有,是否只有当用户重新连接互联网时才会触发?
JobScheduler是一个很好的选择,当您想要触发一些仅在某些前提条件(连接、电池和系统的广播)条件下发生的操作时。在您的情况下,安排一些仅在用户有互联网连接时发生的工作。
您可以使用JobScheduler 最低 API 21 并且不需要 Google Play 服务。FirebaseJobDispatcher 最低 API 9 和 Play Service 是 REQUIRED。
此外, AndroidJob是一个具有最低 API 14 且不需要 Play Service的库。
该视频可以帮助澄清FirebaseJobDispatcher的一些疑问,此外Evernote的这篇文章是很好的资源。
下面的代码将在任何网络上触发,简单来说就是 Wifi 或数据网络
Job myJob = mDispatcher.newJobBuilder()
.setService(MyJobService.class)
.setTag(JOB_TAG)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(5, 5))
.setLifetime(Lifetime.FOREVER)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setReplaceCurrent(false)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.build();
mDispatcher.schedule(myJob);
更改为 .setConstraints(Constraint.ON_UNMETERED_NETWORK) 它将仅在 wifi 网络中工作。
删除即使没有网络也能工作的约束
JobDispatcher的TestApp提供了很好的示例;虽然很普通,但可以使用 Builder 为 Dispatcher 创建 Job。刚刚在这里找到了这个答案,它更详细地解释了它。
/* a recurring job, being triggered in the time-frame in between 59-61 seconds */
Job.Builder builder = dispatcher
.newJobBuilder()
.setTag("SomeJob")
.setService(SomeJobService.class)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(59, 61));