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

Я использую диспетчер заданий 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);

person student93    schedule 04.03.2017    source источник


Ответы (2)


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

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

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

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

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

person Adil Hussain    schedule 24.07.2017

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

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

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

person Mathias Schmidt    schedule 05.07.2018