Есть ли способ сделать периодические задачи с более короткой задержкой?

Я использую диспетчер заданий Firebase и программирую простую периодическую работу, которая должна выполняться каждую минуту или около того, когда есть подключение к Интернету. Я знаю, что задания не выполняются точно в срок, потому что они хотели улучшить время автономной работы и позволить другим приложениям работать, но задержка слишком велика. он может достигать 25 минут, что слишком долго по сравнению с требуемой 1 минутой. Есть ли способ, чтобы периодические задания выполнялись хотя бы каждые 3-5 минут?

Вот как я программирую периодическое задание:

  FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(MainActivity.this));

        Job myJob = dispatcher.newJobBuilder()

                // the JobService that will be called
                .setService(MyJobService.class)
                // uniquely identifies the job
                .setTag("my-unique-tag")
                .setRecurring(true)
                .setLifetime(Lifetime.FOREVER)
                // start between 0 and 10 seconds from now
                .setTrigger(Trigger.executionWindow(0, 10))
                .setReplaceCurrent(true)
                .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
                // constraints that need to be satisfied for the job to run
                .setConstraints(
                        // only run on an unmetered network
                        Constraint.ON_UNMETERED_NETWORK
                )
                .build();

        dispatcher.mustSchedule(myJob);

2 ответа

Если вы хотите, чтобы ваш MyJobService чтобы бегать каждую минуту, нужно изменить это...

.setTrigger(Trigger.executionWindow(0, 10))

... к этому...

.setTrigger(Trigger.executionWindow(60, 60))

То, что вы имели раньше, рассказывало FirebaseJobDispatcher запускать свою работу каждые 0-10 секунд. Вставив в окно 60,60 вы говорите, чтобы запускать вашу работу примерно каждые 60 секунд. Вы также можете изменить это на 55,65 или какой-то другой вариант, но я нашел 60,60 работает хорошо для меня.

У меня была та же проблема: моя работа была запланирована на 60-120 секунд, но между первым и вторым прогоном моей работы, где примерно 6 минут.

Я просто пропустил звонок jobFinished(JobParameters params, boolean needsReschedule) сразу после последней строки последней функции, вызванной заданием. Добавление этого решило проблему в моем случае.

Надеюсь, это поможет.

Другие вопросы по тегам