Метод onStartJob JobService выполняется, как только запланировано задание
Работая над приложением для Android, я использую FirebaseJobDispatcher
запускать работу через каждые 1 минуту.
проблема
Как только я запускаю приложение, задание выполняется, а затем выполняется через каждую 1 минуту.
Вопрос
Почему onStartJob
звонили сразу, когда работа намечена? Почему он не ждет 1 минуту перед выполнением? Что я делаю неправильно?
Код
public static void scheduleReminders(Context context) {
Driver driver = new GooglePlayDriver(context);
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);
Job job = dispatcher.newJobBuilder()
.setService(ReminderJobService.class)
.setTag(JOB_TAG)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setReplaceCurrent(true)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setTrigger(Trigger.executionWindow(60, 65))
.build();
dispatcher.mustSchedule(job);
}
scheduleReminders
функция вызывается из onCreate
Метод основной деятельности.
1 ответ
Исходный код Trigger
содержит:
/**
* Creates a new ExecutionWindow based on the provided time interval.
*
* @param windowStart The earliest time (in seconds) the job should be considered eligible to run.
* Calculated from when the job was scheduled (for new jobs) or last run (for recurring jobs).
* @param windowEnd The latest time (in seconds) the job should be run in an ideal world.
* Calculated in the same way as {@code windowStart}.
* @throws IllegalArgumentException if the provided parameters are too restrictive.
*/
Так как вы планируете повторяющуюся работу (.setRecurring(true)
), время начала окна будет с момента последнего запуска задания, что может вызвать проблемы, если вы перенесите задание с минуты назад без изменений, хотя setReplaceCurrent(true)
следует избегать проблемы.
Более вероятная причина (как сказал @CommonsWare) заключается в том, что эти триггеры не совсем точны, это когда вы хотите, чтобы ОС запланировала вашу работу, а не когда она действительно запустится. in an ideal world
Фраза в комментарии выше является ключевой!
Чтобы повысить вероятность выполнения в нужное время, нужно увеличить окно возможностей, которым обладает ОС, например, 50 и 100 секунд вместо 60 и 65. В качестве альтернативы, если вам нужно что-то в точное время, возможно, сигнал тревоги является лучший подход.