Хобрук: Ваш путь к мастерству в программировании

Как установить период периодической задачи в Firebase JobDispatcher?

Я прочитал все доступные официальные документы (которых на удивление немного), и все, что я мог получить для периодических задач, это этот код

            .setRecurring(true)
            // start between 0 and 60 seconds from now
            .setTrigger(Trigger.executionWindow(0, 60))

Я знаю, что .setRecurring делает задание периодическим, а trigger запускает его с интервалом в 60 секунд, но как насчет второго запуска? означает ли это, что 2-й раз также будет выполнен через 60 секунд, начиная с 1-го?

Это не может быть правдой, потому что даже принимая во внимание оптимизацию фоновых действий и то, что службы запускаются немного позже, чем предполагалось, программирование 60-секундного периода, в то время как задание выполняется примерно на 5/10/20 минут позже, слишком много. разницы. Официальные документы говорят, что разница составляет секунды и, возможно, несколько минут, но не более 20 минут.

В общем, мой вопрос: действительно ли это .setTrigger(Trigger.executionWindow(0, 60)) означает, что период равен 60 секундам, или я ошибаюсь?


Ответы:


1

Когда он не периодический.

.setRecurring(false)
.setTrigger(Trigger.executionWindow(x, y))  

Этот код запустит наше задание между временем x секунд от запланированного задания и y секунд от запланированного задания.

x известен как windowStart, что является самым ранним временем (в секундах), когда задание должно считаться подходящим для выполнения. Рассчитано с момента, когда задание было запланировано (для новых заданий)

y известен как windowEnd. Последнее время (в секундах), когда задание должно выполняться в идеальном мире. Вычисляется так же, как windowStart.

Когда это периодично

.setRecurring(true)            
.setTrigger(Trigger.executionWindow(x, y))

Этот код запустит наше задание между временем x секунд от запланированного задания и y секунд от запланированного задания. Поскольку это периодическое выполнение, следующее выполнение будет запланировано < strong>x секунд после завершения задания.

Также можно сослаться на этот ответ.

03.05.2017

2

будет яснее, если вы посмотрите на источник класса 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.
     */
    public static JobTrigger.ExecutionWindowTrigger executionWindow(int windowStart, int windowEnd) {
        if (windowStart < 0) {
            throw new IllegalArgumentException("Window start can't be less than 0");
        } else if (windowEnd < windowStart) {
            throw new IllegalArgumentException("Window end can't be less than window start");
        }

        return new JobTrigger.ExecutionWindowTrigger(windowStart, windowEnd);
    }

или просто нажмите Ctrl+Click на Trigger, после чего Android Studio перенесет вас к своему источнику. поэтому, если вы напишете: .setTrigger(Trigger.executionWindow(0, 60)), то он будет запускаться каждую секунду

24.03.2017
Новые материалы

Деревья классификации и регрессии
Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..