可以始终使用WorkManager代替协程吗?

Nur*_*lov 5 android kotlinx.coroutines android-jetpack android-workmanager

我想知道当有出色的解决方案作为WorkManager时,为什么要理会rx或协程。但是对于几乎所有教程,他们都使用协程,所以WorkManager可能有缺点吗?

小智 10

后台任务属于以下主要类别之一:

  1. 即时
  2. 延期
  3. 精确的

要对任务进行分类,请回答以下问题:

任务是否需要在用户与应用程序交互时完成?

如果是这样,则应将此任务分类为立即执行。如果没有,请继续第二个问题。

任务需要在准确的时间运行吗?

如果您确实需要在确切的时间运行任务,请将任务分类为精确。

大多数任务不需要在精确的时间运行。任务通常允许根据网络可用性和剩余电池等条件在运行时间上略有不同。不需要在确切时间运行的任务应归类为延迟任务。

Coroutine当任务需要立即执行以及任务将在用户离开特定范围或完成交互时结束时,请使用 Kotlin 。

WorkManager当任务需要立即执行并需要继续处理时使用,即使用户将应用程序置于后台或设备重新启动

AlarmManager当需要在精确的时间点执行任务时使用

欲了解更多详情,请访问此链接


小智 6

两者的适用范围不同。WorkManager 将安排可延迟(以后的任何时间)或立即安排。异步任务。

正如文档所说

WorkManager API 可以轻松指定可延迟的异步任务以及它们应该何时运行。这些 API 允许您创建任务并将其交给 WorkManager 以立即或在适当的时间运行。

另一方面,协程旨在仅立即和异步地计算给定任务。

同样在内部,协程和 WorkManager 的工作方式不同。工作管理器严重依赖 Android 系统组件(如服务、警报管理器等)来安排工作,而协程在工作线程上安排工作,并且与 WorkManager(API)不同,它也是一种语言功能。因此可以肯定地说协程不会超出您的应用程序。另一方面,当您的应用程序未处于活动状态时,WorkManager 甚至可以执行给定的任务。比如后台服务。

同样正如 Marko 所回答的那样,由于其基本设计,使用协程将导致更好的代码可读性和质量。我还想包括ANKO,它是一个很棒的库,它为 Android 的协程提供了有用的 API。


Mar*_*nik 5

如果您的目标是编写干净的代码,而无需传递给后台任务的显式构造的回调,那么您会发现协程是唯一的选择。

使用协程并不排除使用 WorkManager 或任何其他工具进行您选择的后台操作。您可以将协程调整到任何提供回调作为使用后台操作结果继续执行的方法的 API。