我想知道是否可以使用Firebase jobdispatcher来安排url命中并获取响应以更新数据库。我希望它每天晚上运行一次。有人知道这是否可能吗?
我找不到任何这样做的好例子。我已经阅读了android文档和https://github.com/firebase/firebase-jobdispatcher-android#user-内容firebase jobdispatcher-。
我需要使用Firebase作业调度程序,因为我的目标是API 16。
提前谢谢。
更新
这就是我每天安排一次的做法。
final int periodicity = (int) TimeUnit.HOURS.toSeconds(24);
final int toleranceInterval = (int) TimeUnit.HOURS.toSeconds(1);
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job job = dispatcher.newJobBuilder()
.setService(UpdateTVJobService.class)
.setTag(JOB_TAG)
.setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval))
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setReplaceCurrent(true)
.build();
int result = dispatcher.schedule(job);
if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) {
Log.d("JOB_TAG", "ERROR ON SCHEDULE");
}
您可以使用Firebase JobDispatcher来安排定期作业。根据您的需求,您需要创建一个扩展JobService的服务,该服务可以从url获取响应并更新数据库。然后,您可以使用Firebase JobDispatcher来安排此服务。在executionWindow中,您必须指定作业在理想情况下运行的最早和最晚时间。
如果你想在每24小时后安排一次作业,你可以使用执行窗口(60*60*24,60*60*44+60)。然后,如果你想让它每天晚上运行,那么你必须确保它最初安排在晚上。为此,您最初可以在安装应用程序时使用AlarmManager在夜间启动(仅一次),并使用作业调度程序安排重复作业,或者另一种方法是,根据与现在的差异和所需的执行时间,您可以使用将在夜间运行的作业调度程序来安排非递归作业,在该作业服务中,您可以通过作业调度程序计划重复作业。
ExecutionWindow指定近似时间。不能保证它会在给定的窗口运行。如果它错过了窗口,那么在理想的情况下,作业将在稍后的最早时间运行。对于重复作业,一旦作业完成,下一个作业将从上次运行作业开始计算执行窗口时间。
Job myJob = dispatcher.newJobBuilder()
.setTag("my-unique-tag")
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setService(MyJobService.class)
.setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
.setReplaceCurrent(false)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setExtras(myExtrasBundle)
.build();
dispatcher.mustSchedule(myJob);
您可以通过告诉job.Builder创建一个带有触发器的重复性作业来安排重复性作业,该触发器根据您的需要具有执行窗口。