Диспетчер заданий 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);

После того, как я потратил так много времени на документооборот в стеке, я не нашел никакого решения. Затем я просмотрел код диспетчера заданий 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 для значения параметра needsReschedule в методе 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 3-е условие (результат!= JobService.RESULT_FAIL_RETRY;) выполняется в соответствии с этим троичным условием needsReschedule? RESULT_FAIL_RETRY: RESULT_SUCCESS

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

0 ответов

Другие вопросы по тегам