programing

Firebase JobDispatcher-이전 API (JobScheduler 및 GcmTaskService)와 비교하여 어떻게 작동합니까?

nasanasas 2020. 11. 5. 08:10
반응형

Firebase JobDispatcher-이전 API (JobScheduler 및 GcmTaskService)와 비교하여 어떻게 작동합니까?


배경

구글과 같은 직무 / 작업 스케줄링을위한 여러 솔루션을 가지고 JobSchedulerGcmTaskService. 각각의 장점과 단점이 있습니다.

최근 Google은 'Firebase JobDispatcher'라는 새로운 라이브러리를 선보였습니다.

문제

안타깝게도이 새로운 API에 대해 읽을 내용이 거의 없습니다. 사실, 그것에 대해 아무것도 찾기가 정말 어렵습니다.

내가 찾은 유일한 것은 그들의 발표 비디오샘플 입니다. 그러나 그들조차도이 API에 대해 알아야 할 것이 많지 않습니다.

질문

이전 질문, 조사 및 다른 API와 비교 한 내용 ( : 여기 )을 살펴보면서 새 API의 작동 방식을 묻고 사용할 때 고려해야 할 사항을 알고 싶습니다.

  1. 작업에 그대로 유지되고 필요할 때 수정할 수도있는 매개 변수가있을 수 있습니까? 그들은 " 사용자가 제공 한 추가 항목의 선택적 번들입니다. 기본값은 빈 번들입니다. " 샘플에서 말합니다 . 작업 실행시 작업에 의해 수정 될 수 있습니까?

  2. 작업 일정을 쉽게 조정할 수 있습니까? " 작업을 반복할지 여부를 나타내는 부울 "이라고합니다. 일정 변경시기를 어떻게 선택할 수 있습니까? 샘플을 시도하고 "반복"을 선택했지만 다시 실행되지 않고 한 번만 실행되는 것 같습니다.

  3. 고유 ID로 인해 라이브러리의 작업에 대해 보호 될 수 있습니까?

  4. 앱을 업데이트 할 때 특별한주의가 필요합니까 (이전 API와 마찬가지로)? 앱 업데이트 후에도 작업을 예약 할 수 있습니까? 샘플 테스트에서 앱 업데이트 후 작업이 완전히 사라진 것 같습니다. 피할 수 있습니까?

  5. RECEIVE_BOOT_COMPLETED장치를 다시 시작해도 작업을 계속 예약하려면 필요합니까 ? 샘플에있는 것 같습니다.

  6. 예약 된 모든 작업의 ​​목록과 해당 정보 (매개 변수 포함)를 가져 와서 특정 / 모든 작업을 취소하고 수정할 수 있습니까?

  7. 앱의 명확한 데이터 작동시 작업이 제거됩니까?

  8. 작업이 일정 시간 (예 : 오전 7시에서 8시 사이)에 실행되는 것이 가장 좋다고 말할 수 있습니까? " ExecutionWindowTrigger-Job이 실행되어야하는 시간 창을 지정합니다 "라고 언급 됩니다. 그게 다야? 이 창을 놓치면 어떻게 되나요?

  9. 이 방법 onStartJobJobService클래스는 부울하고 있습니다에 대한 설명을 반환 " 남아있는 더 많은 작업이 있는지를. "그것은 무엇을 의미 하는가? 방법 needsReschedule매개 변수는 무엇을 jobFinished의미합니까? 그들은 서로 관련이 있습니까?

  10. 알아야 할 제한 사항이 있습니까? 예를 들어 각 기능에 대한 최소 및 최대 값?


실제로 Firebase Android JobDispatcher는 Android의 작업 예약 엔진에 대한 추상화 계층입니다. 현재로서는 GCM Network Manager에 대한 드라이버 구현이 하나뿐입니다. 즉, 현재 GCM Network Manager가 작동 하는 것과 동일한 방식으로 작동 합니다. 앞으로 더 많은 드라이버가 구현되기를 바랍니다.

1. 작업에 유지되는 매개 변수가 있고 필요할 때 수정할 수도 있습니까? 그들은 샘플 "사용자가 제공 한 추가 번들의 선택적 번들. 기본값은 빈 번들입니다."라고 말합니다. . 이거예요? 작업 실행시 작업에 의해 수정 될 수 있습니까?

  1. 예, 나중에를 통해 액세스 할 수있는 임의의 번들이있는 Job.Builder메서드 setExtras가 있습니다 jobParameters.getExtras(). 번들을 수정할 수 없습니다 ( jobParameters게터 만 포함). 플래그 setReplaceCurrent(true)를 사용 하여 작업을 다시 예약 하고 새 번들을 지정할 수 있습니다.

2. 작업 일정을 쉽게 조정할 수 있습니까? "작업을 반복할지 여부를 나타내는 부울"이라고합니다. 일정 변경시기를 어떻게 선택할 수 있습니까? 샘플을 시도하고 "반복"을 선택했지만 다시 실행되지 않는 것 같습니다. 한 번만 실행됩니다.

  1. 작업을 다시 예약하려면 다음을 지정해야합니다 setRecurring(true).setTrigger(Trigger.executionWindow(10, 20))

이는 창 시작 기한에 도달하자마자 트리거되며 드라이버는 가능하면 창이 종료되기 전에 작업을 실행하는 것이 좋습니다.

3. 고유 ID로 인해 라이브러리의 작업에 대해 보호 될 수 있습니까?

  1. 작업 태그는 애플리케이션에서 고유해야합니다. 휴대폰의 다른 앱에는 자체 '엔드 포인트'(패키지 이름 / 서비스 이름)가 있습니다. 예약 / 완료된 모든 작업을 GooglePlayDriver보려면 다음을 사용하십시오.

    adb shell dumpsys activity service GcmService

4. 이전 API처럼 앱을 업데이트 할 때 특별한주의가 필요합니까? 앱 업데이트 후에도 작업을 예약 할 수 있습니까? 샘플을 테스트 한 결과 앱 업데이트 후 작업이 완전히 사라진 것 같습니다. 피할 수 있습니까?

  1. GCM Network Manager GooglePlayDriver는 Google Play 서비스 또는 앱이 업데이트 된 후 작업을 다시 예약하지 않습니다. 이에 대한 미해결 문제 가 있습니다. 그래서 지금은 이것이 당신의 책임입니다.

5. 장치를 다시 시작해도 작업이 계속 예약되도록하려면 RECEIVE_BOOT_COMPLETED가 필요합니까? 샘플에있는 것 같습니다.

  1. 예, 그러한 허가가 필요합니다. 빌더에는 동작을 제어하는 ​​매개 변수가 있습니다. setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT)물론 자신 만의 드라이버를 만들려면 수명을 직접 관리해야합니다.

6. 예약 된 모든 작업의 ​​목록과 해당 정보 (매개 변수 포함)를 가져 와서 특정 / 모든 작업을 취소하고 수정할 수 있습니까?

  1. 아니요, GCM Network Manager와 동일합니다. 그러나 서비스를 재생하도록 예약하면서 모든 작업을 직접 추적 할 수 있습니다.

7. 앱의 명확한 데이터 작동시 작업이 제거됩니까?

  1. 예, 작업이 제거됩니다. 아마도 이전 버전의 Google Play 서비스에서는 다르게 작동했을 것입니다.

8. 작업이 일정 시간 (예 : 오전 7시에서 8시 사이)에 실행되는 것이 가장 좋다고 말할 수 있습니까? "ExecutionWindowTrigger- Job이 실행되어야하는 시간 창을 지정합니다"라고 언급됩니다. 그게 다야? 이 창을 놓치면 어떻게 되나요?

  1. 음, 7:00에 알람이 울리도록 설정하고를 사용하여 반복되지 않는 작업을 예약 할 수 있습니다 executionWindow(0, 60*60). 작업은 7:00-8:00 사이에 실행됩니다.
    되풀이 작업을 사용할 수 없습니다.

    windowStart-작업을 실행할 수있는 것으로 간주되어야하는 가장 빠른 시간 (초)입니다. 작업이 예약 된 시간 (새 작업의 경우) 또는 마지막 실행 (반복 작업의 경우)부터 계산됩니다.

또한 ExecutionWindowTrigger는 대략적인 시간을 지정합니다. 주어진 창에서 실행된다는 보장은 없습니다. 창을 놓친 경우 작업은 나중에 언제든지 실행됩니다.

9. "JobService"클래스의 "onStartJob"메소드는 부울을 리턴하고 이에 대한 설명은 "남은 작업이 더 있는지 여부"입니다. . 무슨 뜻이에요? "jobFinished"메소드의 "needsReschedule"매개 변수는 무엇을 의미합니까? 그들은 서로 관련이 있습니까?

  1. 만약 onStartJob수단은 당신이 작업을 완료되었는지는 false를 돌려줍니다. 호출 할 필요가 없습니다 jobFinished. RESULT_SUCCESS자동으로 전송됩니다.

경우 onStartJobtrue를 반환 수단 당신은 스레드를 시작하고 결과를 기다리고있다. 작업이 완료 jobFinished되면 작업을 다시 예약해야하는지 여부를 Google Play 서비스에 알리기 위해 호출해야합니다 . 그렇다면에 따라 작업 일정이 변경됩니다 RetryStrategy.

10. 알아야 할 제한 사항이 있습니까? 예를 들어 각 기능에 대한 최소값 및 최대 값?

    • onStartJob가능한 한 빨리 다른 실행 스레드로 작업을 오프로드해야합니다. 그들은 SimpleJobService당신에게 기대되는 것의 예를 제공 합니다.
    • Lollipop의 JobScheduler. 플레이 서비스를 사용할 수없는 구글 때 또한 우리가 아마 구현해야 상황을 처리 할 필요가 Driver기반 AlarmManager.

참고URL : https://stackoverflow.com/questions/37720015/firebase-jobdispatcher-how-does-it-work-compared-to-previous-apis-jobschedule

반응형