Android WorkManager против JobScheduler

Зачем нужен новый Android WorkManager, если у нас уже есть JobScheduler вместе с несколькими отличными backports (AndroidJob и FirebaseJobDispatcher) с одинаковой функциональностью? Есть ли у него какие-то способности убивать или что-то еще? Потому что я не вижу ничего, из-за чего я хочу перейти на еще один планировщик.

Ответ 1

"WorkManager имеет много приятных функций, но его главная цель - использовать API JobScheduler для более старых устройств"... Подождите, но у нас уже есть несколько backports. Что с ними не так? Чтобы сократить его:

  1. FireaseJobDispatcher в порядке, но для Google Play требуется запланировать рабочие места, что не очень хорошо, если мы ориентируемся на Китай, например.

  2. Evernote AndroidJob - отличный backport с большой функциональностью. Imho, это был лучший выбор для планирования любой работы. Но теперь в последней версии библиотеки используется вышеупомянутый WorkManager под капотом. И, к сожалению, рано или поздно библиотека будет устаревшей:

Если вы начинаете новый проект, вы должны использовать WorkManager вместо этой библиотеки. Вы также должны начать перенос кода из этой библиотеки в WorkManager. В какой-то момент в будущем эта библиотека будет устаревшей.

Они предлагают переключиться на WorkManager, потому что он предоставляет больше возможностей, и они также дают нам небольшое сравнение:

|   Feature          | android-job | WorkManager |
| ------------------ | ----------- | ----------- |
| Exact jobs         | Yes         | No          |
| Transient jobs     | Yes         | No          |
| Daily jobs         | Yes         | No          |
| Custom Logger      | Yes         | No          |
| Observe job status | No          | Yes         |
| Chained jobs       | No          | Yes         |
| Work sequences     | No          | Yes         |

Imo, последние 3 функции очень полезны и поддерживаются только WorkManager. Поэтому ответ на мой последний вопрос - да, у него есть некоторые функции убийства:

  • Не требуется Google Play
  • Queryable
  • змеевидных
  • оппортунистических

Чтобы узнать больше о WorkManager, обязательно посмотрите этот разговор Sumir Kataria

PS Если кто-нибудь знает, почему FirebaseJobDispatcher активно поддерживается инженерами Google, а не устарел, напишите в комментариях ниже :)

Ответ 2

WorkManager просто кажется, что Google отвечает на Evernote Android-Job library, но с некоторыми улучшениями. Он использует JobScheduler, Firebase JobDispatcher и AlarmManager так же, как Android-Job, в зависимости от уровня API устройства. Их использование тегов выглядит примерно одинаково, и назначение ограничений для работы/работы достаточно схожи.

Две особенности, которые меня волнуют, - это: возможность целенаправленной работы и способность быть оппортунистической по работе с ограничениями. Первый позволит работать (рабочие места), чтобы быть разбитым и более модульным для меня. И с более модульной работой каждая работа может иметь меньше ограничений, улучшая вероятность того, что они будут выполнены раньше (оппортунистически). Например, большая часть обработки может завершиться до того, как будет выполнена работа с сетевым ограничением.

Поэтому, если вы довольны своей текущей реализацией планировщика, и две функции, о которых я упоминал, не добавляют ценности, я пока не вижу огромной выгоды для создания коммутатора. Но если вы пишете что-то новое, вероятно, стоит использовать WorkManager.

Ответ 3

WorkManager использует сервис JobScheduler для планирования заданий. Если JobScheduler не поддерживается устройством, то оно использует службу Firebase JobDispatcher. Если Firebase JobDispatcher недоступна на устройстве, оно будет использовать AlarmManager и BroadcastReceiver.

Так что с WorkManager вам не нужно беспокоиться об обратной совместимости. В дополнение к этому он позволяет определять ограничения, которые должны быть выполнены для выполнения задания, такие как определение сетевых ограничений, уровня заряда батареи, состояния зарядки и уровня хранения.

Это позволяет цепочку задач и передачу аргумента к работе.

http://www.zoftino.com/scheduling-tasks-with-workmanager-in-android

Ответ 4

WorkManager находится поверх JobScheduler и AlarmManager. WorkManager выбирает правильные API для использования в зависимости от условий, таких как уровень API пользовательского устройства

WorkManager - это простая, но невероятно гибкая библиотека, которая имеет много дополнительных преимуществ. К ним относятся:

 -Support for both asynchronous one-off and periodic tasks.
 -Support for constraints such as network conditions, storage space, and charging -status 
 -Chaining of complex work requests, including running work in parallel.
 -Output from one work request used as input for the next.
 -Handles API level compatibility back to API level 14.
 -Works with or without Google Play services.
 -Follows system health best practices.
 -LiveData support to easily display work request state in UI.