Я всегда могу использовать WorkManager вместо сопрограмм?

Интересно, почему я должен беспокоиться о rx или сопрограммах, когда есть блестящее решение как Workmanager. Но почти во всех уроках они используют сопрограммы, поэтому может быть, у workamanager есть недостатки?

6 ответов

Сфера обоих отличается. WorkManager должен планировать отсрочку (на любое более позднее время) или немедленно. задачи асинхронно.

Как сказано в документации

API WorkManager позволяет легко определять отложенные асинхронные задачи и время их запуска. Эти API позволяют создавать задачи и передавать их в WorkManager для немедленного запуска или в подходящее время.

С другой стороны, сопрограммы предназначены для вычисления заданной задачи только немедленно и асинхронно.

Также внутренне Co-рутины и WorkManager работают по-разному. Диспетчер работы в значительной степени зависит от системных компонентов Android, таких как службы, диспетчер аварийных сигналов и т. Д., Для планирования работы, тогда как сопрограммы планируют работу в рабочих потоках, а также являются языковой функцией в отличие от WorkManager (API). Поэтому можно с уверенностью сказать, что срок действия подпрограмм не выходит за рамки вашего приложения, но WorkManager может даже выполнять данные задачи, когда ваше приложение не активно. например, фоновые услуги.

Также, как ответил Марко, использование сопрограмм приведет к лучшей читаемости и качеству кода благодаря их фундаментальному дизайну. Я также хотел бы включить ANKO, это отличная библиотека, которая предоставляет полезный API для сопрограмм для Android.

Фоновые задачи относятся к одной из следующих основных категорий:

  1. Немедленный
  2. Отложено
  3. Точный

Чтобы классифицировать задачу, ответьте на следующие вопросы:

Должна ли задача выполняться, пока пользователь взаимодействует с приложением?

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

Должна ли задача выполняться в точное время?

Если вам нужно запустить задачу в точное время, классифицируйте задачу как точную.

Большинство задач не нужно запускать в точное время. Задачи обычно допускают небольшие вариации времени их выполнения в зависимости от таких условий, как доступность сети и оставшийся заряд батареи. Задачи, которые не нужно запускать в точное время, следует отнести к категории отложенных.

Используйте Котлин Coroutineкогда задачу необходимо выполнить немедленно, и если задача завершится, когда пользователь покинет определенную область или завершит взаимодействие.

Использовать WorkManagerкогда задача должна быть выполнена немедленно и требует продолжения обработки, даже если пользователь переводит приложение в фоновый режим или перезагружает устройство

Использовать AlarmManagerкогда задача, которую необходимо выполнить в определенный момент времени

Для получения более подробной информации перейдите по этой ссылке

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

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

Из официальной документации:

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

Когда использовать WorkManager Библиотека WorkManager - хороший выбор для задач, которые полезно выполнить, даже если пользователь отходит от определенного экрана или вашего приложения.

Некоторые примеры задач, которые хорошо используют WorkManager:

Загрузка логов

Применение фильтров к изображениям и сохранение изображения

Периодическая синхронизация локальных данных с сетью

WorkManager предлагает гарантированное выполнение, и не все задачи требуют этого. Как таковой, он не является универсальным для запуска каждой задачи из основного потока. Для получения более подробной информации о том, когда использовать WorkManager, ознакомьтесь с Руководством по фоновой обработке.

WorkManager является частью Android Jetpack и компонентом архитектуры для фоновой работы, которая требует сочетания условного и гарантированного выполнения. Оппортунистическое выполнение означает, что WorkManager выполнит вашу фоновую работу, как только сможет. Гарантированное выполнение означает, что WorkManager позаботится о логике, чтобы начать работу в различных ситуациях, даже если вы уходите из приложения.

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

Поддержка как асинхронных одноразовых, так и периодических задач. Поддержка таких ограничений, как состояние сети, объем памяти и состояние оплаты. Цепочка сложных рабочих запросов, включая параллельное выполнение работы. Выход из одного рабочего запроса, используемый в качестве входных данных для следующей совместимости уровня API дескрипторов. вернуться к уровню API 14(см. примечание) Работает с сервисами Google Play или без них. Следует рекомендациям по исправности системы. Поддержка LiveData позволяет легко отображать состояние рабочего запроса в пользовательском интерфейсе.

Кто-то ответил, что WorkManager решает проблему, отличную от корутинов Котлина или реактивной библиотеки, такой как RxJava.

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

Распространенное заблуждение относительно WorkManager заключается в том, что он предназначен для задач, которые нужно запускать в "фоновом" потоке, но не нужно переживать смерть процесса. Это не вариант. Существуют другие решения для этого варианта использования, такие как сопрограммы Kotlin, ThreadPools или библиотеки, такие как RxJava. Вы можете найти больше информации об этом сценарии использования в руководстве по фоновой обработке.