我想在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;
答案 0 :(得分:2)
您可以计算未来特定时间与现在的秒数之间的差异,并在windowStart
方法中将其设置为Trigger.executionWindow()
参数。您可以设置与windowEnd
参数相同的值,以使作业尽可能最接近该时间,但即使在这种情况下,也无法保证作业在特定时间启动。
根据我的经验,在windowStart
和windowStart
值相同的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;