我有点不确定FirebaseJobDispatcher
(JobScheduler)是如何工作的。当用户失去互联网连接然后再次连接我的应用程序以运行时我想要它,并在重新获得连接时进行同步以检查内容更新。
我知道我们不应该使用连接更改广播监听器并使用JobScheduler,但看起来JobScheduler更像是一个更智能的AlarmManager,即使没有连接更改(我不需要),它也会运行。
是这种情况还是我误解了它是如何工作的?如果没有,只有当用户重新获得互联网连接时才会触发?
答案 0 :(得分:3)
JobScheduler是一个很好的选择,当你想要触发一些只在某些前提条件下发生的动作时(连接,电池和系统的广播)。在你的情况下安排一些工作只有在用户有互联网连接时才会发生。
您可以使用JobScheduler 最低API 21,不需要Google Play服务。 FirebaseJobDispatcher 最低API 9和播放服务是必需的 此外,AndroidJob是一个最低API 14并且不需要Play服务的库。
此视频有助于澄清FirebaseJobDispatcher的一些疑问,此外Evernote的这篇文章也是很好的资源。
答案 1 :(得分:2)
下面的代码将在任何网络上以简单的字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网络中使用。
删除即使没有网络
也能工作的constarints答案 2 :(得分:0)
JobDispatcher的TestApp提供了很好的例子; 普通的,可以使用Builder为Dispatcher创建一个Job。刚刚在这里找到了这个answer,这更详细地解释了它。
/* 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));