Изменить период периодической задачи в Firebase JobDispatcher?
Я использовал менеджер сети GCM, но потом я услышал, что Firebase JobDispatcher включает в себя GCM плюс другие функции, поэтому я пытаюсь использовать это. Я успешно запрограммировал периодическое задание, и оно отлично работает, но проблема в том, что мне нужно изменить период, а не фиксировать его с самого начала.
Причина в том, что я использую сервис распознавания активности и хочу, чтобы в следующий раз JobDispatcher выполнял периодическую задачу на основе обнаруженной текущей активности. Например, если вы идете, следующий раз, когда задание будет запущено, через 30 минут, а если вы в машине, то это будет 5 минут (в основном потому, что если вы в машине, ваш телефон более вероятно обеспечит различные значения местоположения за короткое время по сравнению с тем, когда вы пешком).
Это способ, которым я программирую периодическую задачу, так как вы видите, что я устанавливаю фиксированное значение, я хочу знать, может ли служба, запускаемая этой задачей, предоставить обратную связь, которая изменит период задачи.
final Builder builder = jobDispatcher.newJobBuilder()
.setTag(form.tag.get())
.setRecurring(form.recurring.get())
.setLifetime(form.persistent.get() ? Lifetime.FOREVER : Lifetime.UNTIL_NEXT_BOOT)
.setService(DemoJobService.class)
.setTrigger(Trigger.executionWindow(
form.getWinStartSeconds(), form.getWinEndSeconds()))
.setReplaceCurrent(form.replaceCurrent.get())
.setRetryStrategy(jobDispatcher.newRetryStrategy(
form.retryStrategy.get(),
form.getInitialBackoffSeconds(),
form.getMaximumBackoffSeconds()));
if (form.constrainDeviceCharging.get()) {
builder.addConstraint(Constraint.DEVICE_CHARGING);
}
if (form.constrainOnAnyNetwork.get()) {
builder.addConstraint(Constraint.ON_ANY_NETWORK);
}
if (form.constrainOnUnmeteredNetwork.get()) {
builder.addConstraint(Constraint.ON_UNMETERED_NETWORK);
}
0 ответов
Для этого вам понадобится onStartJob
в DemoJobService.class
отменить себя, используя свой тег, который вы сохранили в SharedPrefs / elsewhere (form.tag.get()
в вашем примере):
FirebaseJobDispatcher(GooglePlayDriver(context)).cancel(yourTag)
Затем он может перепланировать работу с обновленными параметрами. К сожалению, в настоящее время нет возможности редактировать вакансии, их нужно отменить и создать заново!