在特定时间触发Firebase作业调度程序

时间:2017-06-25 09:27:05

标签: android job-scheduling

我想在1498383000000L之类的特定时间触发Firebase Job Dispatcher。但触发方法有一个窗口,我们指定时间。我该如何克服这个问题?

 Job newJob = dispatcher.newJobBuilder()

            //update if any task with the given tag exists.
            .setReplaceCurrent(true)

            //Integrate the job you want to start.
            .setService(ScheduledJobService.class)

            .setTag("UniqueTagForYourJob")

            // Run between 30 - 60 seconds from now.
            .setTrigger(Trigger.executionWindow(30, 60))

            .build();

    return newJob;

1 个答案:

答案 0 :(得分:2)

您可以计算未来特定时间与现在的秒数之间的差异,并在windowStart方法中将其设置为Trigger.executionWindow()参数。您可以设置与windowEnd参数相同的值,以使作业尽可能最接近该时间,但即使在这种情况下,也无法保证作业在特定时间启动。

根据我的经验,在windowStartwindowStart值相同的windowEnd时间之后,作业通常不会超过一分钟(有时在几秒钟内) 。

在下面的示例中,根据所需的作业开始时间计算开始时间,并为作业开始设置60秒窗口。

long timeInFuture = 1498383000000L;
int jobTime = Math.round((System.currentTimeMillis() - timeInFuture) / 1000);
Job newJob = null;
if (jobTime >= 0){
   newJob = dispatcher.newJobBuilder()
            .setReplaceCurrent(true)
            .setService(ScheduledJobService.class)
            .setTag("UniqueTagForYourJob")
            .setTrigger(Trigger.executionWindow(jobTime, jobTime + 60))
            .build();
}

return newJob;