Firebase JobDispatcher: как перенести ту же работу?

Я новичок в JobDispatcher, поэтому я не совсем уверен, имеет ли смысл мой вопрос или нет.

У меня есть требование, когда мне нужно периодически запускать некоторые задачи в фоновом режиме (даже если приложение не запущено). Задача не выполняется в фиксированный интервал времени. При выполнении задачи в первый раз я узнаю расписание выполнения следующей задачи. Поэтому после первого выполнения я должен переназначить ту же задачу на следующий раз в будущем, о чем я узнаю после выполнение задания. И так продолжается.

Это похоже на синхронизацию чего-то из сети, и сетевые данные сообщат, когда синхронизировать дальше.

Итак, мои вопросы

Должен ли я каждый раз создавать новое задание для каждой новой задачи?

Могу ли я создать повторяющееся задание и продолжать изменять интервал?

Как я могу справиться с этим сценарием именно с помощью FireBaseJobDispatcher.

Я выбрал FireBaseJobDispatcher, а не JobScheduler, потому что мое приложение также должно поддерживать ниже Lollipop.

Вот пример кода, который я пробовал с FireBaseJobDispatcher с выполнением задачи в заданное время, и он работает нормально. Теперь я застрял, как переназначить его на следующее время синхронизации.

        public class MyJobService extends JobService {
            private static final String TAG = "MyJobService";
            @Override
            public boolean onStartJob(final JobParameters job) {
                // Do some work here
                Log.d(TAG, "onStartJob: at "+Thread.currentThread().getName());
               new Thread(new Runnable() {
                   @Override
                   public void run() {
                       Log.d(TAG, "run: startign job ");
                       try {
                           Thread.sleep(2000);
                           // some syncing operation
                       } catch (InterruptedException e) {
                           e.printStackTrace();
                       }
                       Log.d(TAG, "run: job done");
                       // here I need to reschedule the same job to a future time

                   }
               }).start();
                return false; 
            }

            @Override
            public boolean onStopJob(JobParameters job) {
                Log.d(TAG, "onStopJob: ");
                return false;
            }
        }

Я устанавливаю задание в такой деятельности

   // Create a new dispatcher using the Google Play driver.
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
    Bundle myExtrasBundle = new Bundle();
    myExtrasBundle.putString("some_key", "some_value");

    Job myJob = dispatcher.newJobBuilder()
            .setService(MyJobService.class)
            .setTag("syncservice")
            .setRecurring(true)
            .setLifetime(Lifetime.FOREVER)
            .setTrigger(Trigger.executionWindow(1*60*60 , 1*60*60)) // rigger after an hour
            // don't overwrite an existing job with the same tag
            .setReplaceCurrent(false)
            // retry with exponential backoff
            .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
            .setConstraints(
                    Constraint.ON_ANY_NETWORK
            )
            .setExtras(myExtrasBundle)
            .build();

    dispatcher.mustSchedule(myJob); 

Заранее спасибо!


person doe    schedule 15.10.2018    source источник


Ответы (1)


@Override
public boolean onStopJob(JobParameters job) {
  Log.d(TAG, "onStopJob: ");
  if(rescheduleJob)
    return true; // reschedule job
  else
    return false; // cancel job
}

Или вы можете попробовать:

@Override
public boolean onStopJob(JobParameters job) {
  Log.d(TAG, "onStopJob: ");
  return rescheduleJob;
}
person Afinas EM    schedule 26.12.2018