Я новичок в 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);
Заранее спасибо!