Firebase JobDispatcher - как он работает по сравнению с предыдущими API (JobScheduler и GcmTaskService)?

Фон

У Google есть несколько решений для планирования работы / задач, таких как JobScheduler а также GcmTaskService, У каждого есть свои преимущества и недостатки.

Недавно Google представил новую библиотеку под названием "Firebase JobDispatcher".

Эта проблема

К сожалению, об этом новом API читать очень мало. На самом деле, действительно трудно найти что-либо об этом.

Единственное, что я нашел, это их объявление видео и образец. Но даже их, не так много, чтобы знать об этом API.

Вопросы

Глядя на предыдущие вопросы, исследования и сравнения, которые у меня были с другими API ( здесь, например), я хотел бы спросить, как работает новый API, и знать, что следует учитывать при его использовании:

  1. Может ли задание иметь параметры, которые остаются с ним и даже могут быть изменены при необходимости? В примере они говорят: "Необязательный комплект пользовательских дополнений. По умолчанию используется пустой комплект". Это так? Может ли оно быть изменено заданием при его выполнении?

  2. Можно ли легко перепланировать работу? Сказано: "Булево значение, указывающее, должно ли Иов повториться". Как это можно выбрать, когда перепланировать? Я попробовал образец и выбрал "Повторяющийся", но, похоже, он не запускается снова, только один раз.

  3. Может ли он быть защищен от работы библиотеки (из-за уникальных идентификаторов)?

  4. Нужно ли проявлять особую осторожность при обновлении приложения (как это делали предыдущие API)? Можно ли запланировать работу после обновления приложения? Тестирование на образце, похоже, что после обновления приложения работы полностью исчезли. Можно ли этого избежать?

  5. Нужно ли это RECEIVE_BOOT_COMPLETED в случае, если я хочу, чтобы работа по-прежнему планировалась даже после перезагрузки устройства? Образец, кажется, есть.

  6. Можно ли получить список всех запланированных заданий и их информацию (включая параметры), а также иметь возможность отменить определенные / все из них и даже изменить их?

  7. Будет ли работа удалена после операции очистки данных приложения?

  8. Можно ли сказать заданию, что лучше всего оно будет выполнено в течение определенного периода времени (например, с 7:00 до 8:00 утра)? Упоминается "ExecutionWindowTrigger - который указывает временное окно, в котором должно быть выполнено задание". Это оно? Что происходит, когда он пропускает это окно?

  9. Метод onStartJob в JobService класс возвращает логическое значение и описание для него: "есть ли еще работа". Что это значит? Что это needsReschedule параметр jobFinished метод значит? Они связаны друг с другом?

  10. Есть ли какие-то ограничения, о которых я должен знать? Например, минимальные и максимальные значения для каждой из функций?

1 ответ

На самом деле Firebase Android JobDispatcher - это слой абстракции вокруг механизмов планирования заданий на Android. И на данный момент у них есть только одна реализация драйвера для GCM Network Manager. Это означает, что в настоящее время он ведет себя так же, как GCM Network Manager. Надеемся, что в будущем будет реализовано больше драйверов.

1. Может ли задание иметь параметры, которые остаются с ним и даже могут быть изменены при необходимости? В примере они говорят: "Опциональный Пакет пользовательских дополнений. По умолчанию это пустой Пакет" . , Это оно? Может ли оно быть изменено заданием при его выполнении?

  1. Да, Job.Builder имеет метод setExtras с произвольным набором, который позже может быть доступен через jobParameters.getExtras(), Вы не можете изменить пакет (jobParameters содержит только геттеры). Вы можете перенести свою работу с флагом setReplaceCurrent(true) и укажите новый пакет.

2. Можно ли легко перепланировать работу? Сказано: "Булево значение, указывающее, должно ли Иов повториться" . Как это можно выбрать, когда перепланировать? Я попробовал образец и выбрал "Повторяющийся", но, похоже, он не запускается снова, только один раз.

  1. Для перепланировки работы необходимо указать setRecurring(true), setTrigger(Trigger.executionWindow(10, 20))

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

3. Может ли он быть защищен от работы библиотеки (из-за уникальных идентификаторов)?

  1. Теги вакансий должны быть уникальными в вашем приложении. Другие приложения на телефоне имеют свои собственные "конечные точки" (название пакета / название услуги). Чтобы увидеть все запланированные / законченные работы для GooglePlayDriver пожалуйста, используйте

    adb shell dumpsys activity service GcmService

4. Требуется ли дополнительная осторожность при обновлении приложения (как это делали предыдущие API)? Можно ли запланировать работу после обновления приложения? Тестирование на образце, похоже, что после обновления приложения работы полностью исчезли. Можно ли этого избежать?

  1. Что касается GCM Network Manager GooglePlayDriver не перепланирует задания после того, как Google Play Services или приложение обновлено. Вот открытый вопрос для этого. Так что пока это ваша ответственность.

5. Нужно ли RECEIVE_BOOT_COMPLETED на случай, если я хочу, чтобы задание все еще планировалось, даже после перезапуска устройства? Образец, кажется, есть.

  1. Да, вам нужно такое разрешение. В Builder есть параметр для управления поведением: setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT) Конечно, если вы собираетесь создать свой собственный драйвер, вам придется позаботиться о жизни на всю жизнь.

6. Можно ли получить список всех запланированных заданий и их информацию (включая параметры), а также иметь возможность отменить определенные / все из них и даже изменить их?

  1. Нет, так же, как и для GCM Network Manager. Но вы можете сами как-то отследить все задания, планируя их для предоставления услуг.

7. Будет ли работа удалена после операции очистки данных приложения?

  1. Да, работа будет удалена. Вероятно, в предыдущих версиях сервисов Google Play он вел себя иначе.

8. Можно ли сказать, что задание лучше всего выполнять в течение определенного периода времени (например, между 7:00 и 8:00 утра)? Упоминается "ExecutionWindowTrigger- который указывает временное окно, в котором должно быть выполнено задание" . Это оно? Что происходит, когда он пропускает это окно?

  1. Ну, вы можете установить будильник в 7:00 и запланировать одноразовую работу с executionWindow(0, 60*60), Работа будет выполняться с 7:00 до 8:00.
    Вы не можете использовать повторяющуюся работу, потому что

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

Кроме того, ExecutionWindowTrigger указывает приблизительное время. Не гарантируется, что он будет работать в данном окне. Если он пропустит окно, задание будет запущено в любое время.

9. Метод "onStartJob" в классе "JobService" возвращает логическое значение, а описание для него - "есть ли еще работа" . , Что это значит? Что означает параметр needsReschedule метода jobFinished? Они связаны друг с другом?

  1. если onStartJob возвращает false, что означает, что вы завершили свою работу. Нет необходимости вызывать jobFinished, RESULT_SUCCESS отправляется автоматически.

если onStartJob возвращает true, что означает, что вы запустили поток и ожидаете результатов. Как только вы закончите, вы должны призвать jobFinished информировать сервисы Google Play о том, следует ли перенести работу или нет. Если да, работа будет перенесена в зависимости от RetryStrategy,

10. Есть ли какие-то ограничения, о которых я должен знать? Например, минимальные и максимальные значения для каждой из функций?

    • onStartJob должен как можно быстрее перенести работу в другой поток выполнения. Они обеспечивают SimpleJobService как пример того, что ожидается от вас.
    • Для Lollipop нет реализации драйвера JobScheduler, Также необходимо разобраться с ситуацией, когда сервисы Google Play недоступны, нам, вероятно, следует реализовать Driver основанный на AlarmManager,
Другие вопросы по тегам