я всегда могу использовать WorkManager вместо сопрограмм? - PullRequest
0 голосов
/ 25 ноября 2018

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

Ответы [ 4 ]

0 голосов
/ 16 февраля 2019

WorkManager:

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

Сопрограммы:

Чистый код, работает под капотом по-другому.Беги немедленно.

Поэтому, в зависимости от твоих требований, выбери лучший вариант.

0 голосов
/ 26 ноября 2018

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

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

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

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

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

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

0 голосов
/ 23 декабря 2018

Ответили другие, WorkManager решает проблему, отличную от corountines Kotlin или реактивной библиотеки, такой как RxJava.

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

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

0 голосов
/ 25 ноября 2018

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

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

...