Повторяющаяся работа диспетчера заданий Firebase не работает

Я планирую повторяющееся задание с помощью диспетчера заданий firebase. Но это не выполняется.

Job job = builder.setService(FetchGCMNotificationService.class)
                .setTag(FIREBASE_JOB_TAG)
                .setRecurring(true)
                .setLifetime(Lifetime.FOREVER)
                .setReplaceCurrent(true)
                .setConstraints(Constraint.ON_ANY_NETWORK)
                .setTrigger(Trigger.executionWindow(TimeUnit.MINUTES.toSeconds(9),TimeUnit.MINUTES.toSeconds(10)))
                .build();
firebaseJobDispatcher.mustSchedule(job);

Потратив столько времени на документацию stackoverflow и firebase, я не нашел никакого решения. Затем я просмотрел код диспетчера заданий firebase и обнаружил условие для перепланирования заданий. Условие находится в классе GooglePlayReceiver:

private static boolean needsToBeRescheduled(JobParameters job, int result) {
return job.isRecurring()
    && job.getTrigger() instanceof ContentUriTrigger
    && result != JobService.RESULT_FAIL_RETRY;

}

Согласно этому вышеуказанному условию

  1. Работа должна повторяться, что верно в моем случае
  2. job.getTrigger() должен быть экземпляром ContentUriTrigger. Я запутался здесь, потому что я хочу выполнить свою работу на основе ExecutionWindowTrigger. Итак, как я могу дать ContentUriTrigger.
  3. И последнее условие верно в моем случае, потому что, когда моя работа выполняется, я передаю false для значения параметра needReschedule в методе jobFinished.

Реализация метода jobFinished в классе JobService:

public final void jobFinished(@NonNull JobParameters job, boolean needsReschedule) {
if (job == null) {
  Log.e(TAG, "jobFinished called with a null JobParameters");
  return;
}

synchronized (runningJobs) {
  JobCallback jobCallback = runningJobs.remove(job.getTag());

  if (jobCallback != null) {
    jobCallback.sendResult(needsReschedule ? RESULT_FAIL_RETRY : RESULT_SUCCESS);
  }
}}

Итак, в GooglePlayReceiver третье условие (результат! = JobService.RESULT_FAIL_RETRY;) истинно на основе этого тройного условия needReschedule? RESULT_FAIL_RETRY : RESULT_SUCCESS

Пожалуйста, изучите этот вопрос и поправьте меня, если я ошибаюсь.


person Himanshu    schedule 09.10.2018    source источник
comment
Работа начинается, если вы ждете дольше? Android 7+ имеет минимальный 15-минутный интервал для повторяющихся заданий stackoverflow.com/questions/44029455/   -  person atarasenko    schedule 16.10.2018
comment
Моя работа выполняется 5 или 6 раз, после чего она не будет выполнена.   -  person Himanshu    schedule 22.10.2018