Android JobScheduler: использование setMinimumLatency с setPeriodic

Я просто играю с JobScheduler, и у меня есть пара мелочей.

Один из них заключается в том, что, хотя вы можете отложить задание, используя setMinimumLatency(), вы не можете использовать это в сочетании с setPeriodic(), так как возникает исключение.

Я действительно не могу понять, почему это так... кажется разумным отложить запуск периодического задания, так же как разумно отложить запуск одноразового задания.

Учитывая, что вы не можете, как лучше всего запланировать периодическое задание, которое запускается в будущем (даже после перезагрузки), используя JobScheduler?


person drmrbrewer    schedule 03.09.2016    source источник
comment
почему это не разумно... -- почему разработчик X сделал что-то Y, вопросы не подходят для переполнения стека, поскольку только разработчик X может авторитетно ответить на вопрос. как лучше всего... -- с ходу, либо запланируйте задание сейчас, и ваша служба работы пропустит задания, для которых еще нет времени, либо используйте AlarmManager, чтобы получить контроль в то время, когда вы хотите, чтобы задания запускались .   -  person CommonsWare    schedule 03.09.2016
comment
Что ж, у меня уже все отлично работает с AlarmManager, но я подумал, что JobScheduler — это рекомендуемый путь вперед. Основная причина, по которой я рассматриваю возможность перехода к использованию JobScheduler, заключается в том, что прослушивание CONNECTIVITY_CHANGE в моем AppWidgetProvider больше невозможно в Android N. Поэтому я перехожу от решения AlarmManager с прослушиванием подключения к JobScheduler (подключение -слушаю) решение с... AlarmManager болтом. Хей-хо.   -  person drmrbrewer    schedule 03.09.2016
comment
P.S. вопрос, почему это не разумно, был риторическим... Я перефразировал его как утверждение.   -  person drmrbrewer    schedule 03.09.2016
comment
Я думал, что JobScheduler был рекомендованным способом продвижения вперед — ну, это так, для определенного класса работы. Это не решит все возможные классы работы. Вы не будете использовать его для будильника или, например, для напоминаний календаря. Ваш запланированный вариант использования не соответствует ни одному API.   -  person CommonsWare    schedule 03.09.2016
comment
Да, я использую AlarmManager для планирования периодического обновления виджета (с большей гибкостью, чем позволяют стандартные методы AppWidgetProvider, включая обновление после восстановления подключения, когда обновление было пропущено). Все это прекрасно работает... но теперь они убрали CONNECTIVITY_CHANGE :-( Может быть, мне нужно сохранить неповрежденной AlarmManager структуру и просто запланировать JobService (чтобы прослушивать соединение) при каждом обновлении тревоги, а не сразу запускать Service , как в настоящее время.   -  person drmrbrewer    schedule 03.09.2016
comment
FirebaseDispatcher отлично справляется со своей задачей, вам не нужно по-разному обрабатывать все API, он выполняет свою работу, используя соответственно JobService, Alarm Manager и GCM Service. Вы также можете попробовать Worker Manager , хотя он только что был выпущен. Но с Firebase вам придется обрабатывать задания после перезагрузки, но я думаю, что Worker Manager обрабатывает и эту часть (еще не пробовал)   -  person Tas    schedule 22.03.2019


Ответы (1)


В вашей реализации класса JobService вызовите jobFinished(params, reschedule); для изменения расписания перед выходом из метода onStartJob.

Также не забудьте указать метод return true в методе onStopJob для переноса расписания.

https://developer.android.com/reference/android/app/job/JobService.html#jobFinished(android.app.job.JobParameters, логическое значение)

person Thupten    schedule 12.12.2016