2

나는 (많은 의외로하지 않은) 사용 가능한 모든 공식 문서를 읽어 봤는데,주기적인 작업에 얻을 수있는 모든 내가 .setRecurring이 작업이 주기적으로 만드는 것을 알고이 코드Firebase JobDispatcher에서 주기적 작업 기간을 설정하는 방법은 무엇입니까?

  .setRecurring(true) 
      // start between 0 and 60 seconds from now 
      .setTrigger(Trigger.executionWindow(0, 60)) 

하고 trigger 그것을 만드는 60 초 간격으로 시작하지만 두 번째 실행 시간은 어떻게됩니까? 이것은 두 번째 시간도 첫 번째 시간부터 60 초 실행된다는 것을 의미합니까?

배경 활동의 최적화와 예상보다 조금 늦은 서비스 실행 방법을 고려하더라도 작업이 약 5/10/20 분 동안 실행되는 동안 60 초 동안 프로그래밍되므로 나중에 너무 많은 차이가 있습니다. 공식 문서에 따르면 그 차이는 초이고 아마도 20 분 넘지 않는 몇 분이라고합니다.

기본적으로 내 질문은이 .setTrigger(Trigger.executionWindow(0, 60))은 실제로 기간이 60 초임을 의미합니까 아니면 내가 잘못 했는가?

답변

0

당신이 트리거 클래스의 소스를 보면이 명확하게 될 것이다 here

그 상태 :

/** 
 
    * Creates a new ExecutionWindow based on the provided time interval. 
 
    * 
 
    * @param windowStart The earliest time (in seconds) the job should be 
 
    *     considered eligible to run. Calculated from when the 
 
    *     job was scheduled (for new jobs) or last run (for 
 
    *     recurring jobs). 
 
    * @param windowEnd The latest time (in seconds) the job should be run in 
 
    *     an ideal world. Calculated in the same way as 
 
    *     {@code windowStart}. 
 
    * @throws IllegalArgumentException if the provided parameters are too 
 
    *         restrictive. 
 
    */ 
 
    public static JobTrigger.ExecutionWindowTrigger executionWindow(int windowStart, int windowEnd) { 
 
     if (windowStart < 0) { 
 
      throw new IllegalArgumentException("Window start can't be less than 0"); 
 
     } else if (windowEnd < windowStart) { 
 
      throw new IllegalArgumentException("Window end can't be less than window start"); 
 
     } 
 

 
     return new JobTrigger.ExecutionWindowTrigger(windowStart, windowEnd); 
 
    }

하거나 Ctrl 키 +는 Trigger 다음 안드로이드 스튜디오 것이다 클릭 너를 그 근원으로 데려 간다. 그래서 만약 당신이 쓸 : .setTrigger(Trigger.executionWindow(0, 60)) 그때 그것은 매 초마다 실행됩니다

1

비 정기적입니다.

.setRecurring(false) 
.setTrigger(Trigger.executionWindow(x, y)) 

이 코드는 직장에서초이 예약 된 Y하여 직장에서 X초이 예약 된 시간과 사이에 우리의 작업을 실행합니다.

X 알고있는 작업을 실행할 자격이 고려되어야한다 (초) 빠른 시간 windowStart, 있다. 작업이

Y이 작업이 이상적으로 실행해야합니다 windowEnd (초) 최신 시간으로 알고있다 (새 작업에 대한) 계획 때부터 계산. windowstart과 같은 방식으로 계산됩니다. 그것은이 코드는 작업에서 X초하여 예약 된 시간과 작업에서초이었다 y를 사이에 우리의 작업을 실행합니다

.setRecurring(true)    
.setTrigger(Trigger.executionWindow(x, y)) 

주기 때

는 scheduled.Since이 다음 주기적 작업이 완료된 후에 실행이 예약됩니다 x 초.

this 대답을 참조 할 수도 있습니다.