android - 在特定时间触发 Firebase Job Dispatcher

标签 android job-scheduling

我想在特定时间触发 Firebase Job Dispatcher,例如 1498383000000L。但是触发方法有一个窗口,我们可以在其中指定时间。我该如何克服这个问题?

 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;

最佳答案

您可以以秒为单位计算 future 特定时间与现在之间的差异,并将其设置为 Trigger.executionWindow() 方法中的 windowStart 参数。您可以设置与 windowEnd 参数相同的值,以使作业尽可能接近那个时间开始,但即使在这种情况下也不能保证作业在特定时间开始。

根据我的经验,当 windowStartwindowEnd 值是相同的值。

在下面的示例中,开始时间是根据所需的作业开始时间计算的,并为作业设置了 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;

关于android - 在特定时间触发 Firebase Job Dispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44744991/

相关文章:

android - 作业调度服务

java - 工作恢复时 quartz 故障

c# - Quartz.net 中的 'DisallowConcurrentExecution' 到底是什么意思

java - 如何在java、android中初始化巨大的 float 组?

android - 创建镜像布局

Javascript 获取响应截止

android - 如何检测android中某个渲染器区域内的触摸事件?

javascript - 检测在 Android Stock 浏览器上作为主屏幕应用程序运行的 Web 应用程序

algorithm - 作业调度算法的反例 "Earliest End time First"

Linux调度程序修改