我想知道为什么在有如此出色的解决方案WorkManager的情况下,我还需要使用rx或coroutines。但几乎所有的教程都使用coroutines,那么WorkManager是否具有劣势?
我想知道为什么在有如此出色的解决方案WorkManager的情况下,我还需要使用rx或coroutines。但几乎所有的教程都使用coroutines,那么WorkManager是否具有劣势?
两者的范围是不同的。WorkManager 用于异步调度可延迟(到任何后续时间)或立即执行的任务。
正如文档所述
WorkManager API 可以轻松地指定可延迟、异步任务以及它们应该运行的时间。这些 API 允许您创建一个任务并将其交给 WorkManager 立即或在适当的时间运行。
另一方面,协程旨在计算给定任务,仅限立即和异步。
而且,在内部,协程和 WorkManager 的工作方式不同。WorkManager 严重依赖 Android 系统组件,如服务、闹钟管理器等来安排工作,而协程在 Worker 线程上安排工作,并且是语言特性,不像 WorkManager(API)。因此可以说,协程不会超出您的应用程序。另一方面,WorkManager 甚至可以在您的应用程序不活动时执行给定的任务,例如后台服务。
正如 Marko 所回答的那样,使用协程将导致更好的代码可读性和质量,因为它们的基本设计。我还想包括ANKO,它是一个为 Android 提供围绕协程的有用 API 的优秀库。
后台任务分为以下几类:
要将任务分类,请回答以下问题:
任务是否需要在用户与应用程序交互期间完成?
如果是,则应将此任务分类为立即执行。如果不是,则继续回答第二个问题。
任务是否需要在精确时间运行?
如果需要在精确时间运行任务,则将任务分类为精确执行。
大多数任务无需在精确时间运行。任务通常允许根据网络可用性和剩余电量等条件略微变化其执行时间。不需要在精确时间运行的任务应被归类为延迟执行。
当任务需要立即执行并且任务将于用户离开某个范围或完成交互时结束时,请使用Kotlin Coroutine
。
当任务需要立即执行并且需要持续处理时,即使用户将应用程序置于后台或设备重新启动时,请使用 WorkManager
。
当任务需要在精确时间点执行时,请使用AlarmManager
。
有关更多详细信息,请访问此链接。
WorkManager:
支持异步一次性和定期任务 支持约束条件,例如网络状况、存储空间和充电状态 链接复杂的工作请求,包括并行运行工作 一个工作请求的输出用作下一个工作请求的输入 向后处理API级别兼容性至API级别14(见注释) 与或没有Google Play服务一起使用 遵循系统健康最佳实践 LiveData支持,以便在UI中轻松显示工作请求状态 等待适当的时间运行。
协程:
干净的代码,在底层以不同的方式运行。立即运行。
因此,根据您的需求选择更好的选项。
其他人已回复,WorkManager解决的问题与Kotlin的协程或类似RxJava的反应式库不同。
现在,WorkManager作为beta版本可用,并且会生成其他文档,希望这些文档可以让它更加清晰明了。其中之一是我与同事撰写的博客文章:介绍WorkManager,您可以阅读:
关于WorkManager的一个常见误解是,它适用于需要在“后台”线程中运行但不需要在进程死亡时保留的任务。这不是事实。对于这种用例,有其他解决方案,例如Kotlin的协程、ThreadPools或类似RxJava的库。您可以在后台处理指南中找到有关此用例的更多信息。
WorkManager
存在的目的是为了解决不同的问题。 - CommonsWare