Android - Firebase jobdispatcher

Sol*_*Sol 13 android android-service firebase firebase-job-dispatcher

我想知道是否可以使用Firebase jobdispatcher来安排网址命中并获取响应以更新数据库.我希望它每天晚上运行一次.有谁知道这是否可能?

我找不到这样做的好例子.我已经阅读了android文档和https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-.

我需要使用Firebase jobdispatcher,因为我的目标是API 16.

提前致谢.

UPDATE

这就是我每天安排一次的工作.

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");
}
Run Code Online (Sandbox Code Playgroud)

And*_*per 16

您可以使用Firebase JobDispatcher安排定期作业.根据您的要求,您需要创建一个扩展JobService的服务,该服务从URL获取响应并更新数据库.然后,您可以使用Firebase JobDispatcher计划此服务.在executionWindow中,您必须指定作业应在理想情况下运行的最早和最晚时间.

如果你想在每24小时后安排工作,你可以使用执行窗口(60*60*24,60*60*24 + 60).然后,如果你想要它应该每晚运行,那么你必须确保它是最初安排在晚上.为此,您可以在安装应用程序时使用AlarmManager在夜间(仅一次)触发,并使用作业调度程序安排定期作业,或者另一种方式是基于现在的差异和所需的执行时间使用jobdispatcher安排非递归作业,该作业将在晚上和该作业服务中运行,您可以使用作业调度程序安排重复作业.

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);
Run Code Online (Sandbox Code Playgroud)