2017-06-25 50 views
0

我想在特定時間觸發Firebase作業調度員,如1498383000000L。但觸發方法有一個窗口,我們指定時間。我如何克服這一點?在特定時間觸發Firebase作業調度員

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

您可以在幾秒鐘在未來計算特定的時間之間的差異,現在並將其設置爲在Trigger.executionWindow()方法windowStart參數。您可以設置與windowEnd參數相同的值,以儘可能使作業儘可能接近該時間,但即使在這種情況下,也無法保證作業在特定時間開始。

根據我的經驗,在windowStartwindowEnd值是相同值的windowStart時間後,作業通常不會超過一分鐘(有時在幾秒鐘內)。

在以下示例中,根據所需的作業開始時間計算開始時間,併爲作業啓動設置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; 
相關問題