Android - Firebase 作业调度程序

Android - Firebase jobdispatcher

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

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

我需要使用 Firebase jobdispatcher,因为我的目标是 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");
}

您可以通过告诉 Job.Builder 创建一个 recurring 作业和 Trigger 来安排一个循环作业根据您的需要执行window。

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

如果你想在每 24 小时后安排作业,你可以使用执行 window (60*60*24,60*60*24+60)。如果你想要它应该 运行 每晚然后你必须确保它最初安排在 night.For 你可以最初使用 AlarmManager 在晚上(仅一次)在安装应用程序时被解雇并使用作业调度程序或另一个安排重复作业方法是,根据与现在的差异和所需的执行时间,您可以使用 jobdispatcher 安排非递归作业,它将 运行 在晚上和在该作业服务中,您可以使用作业调度程序安排重复作业。

ExecutionWindow 指定了大概的时间。不能保证在给定 window 时它会 运行。如果它错过了 window 作业将在理想 circumstances.For 下最早的时间 运行 一旦作业完成,下一个作业将计算执行 window 时间最后 运行.

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);