我可以一直使用WorkManager而不是协程吗?

问题描述 投票:3回答:4

我想知道为什么当有一个很好的解决方案作为WorkManager时,我应该使用rx或协同程序。但对于几乎所有的教程,他们都使用协同程序,因此WorkManager可能有缺点吗?

android android-jetpack kotlinx.coroutines android-workmanager
4个回答
3
投票

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

正如文件所说

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

另一方面,协同程序被设计为仅立即和异步地计算给定任务。

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

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


2
投票

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

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


1
投票

何时使用WorkManager即使用户离开特定屏幕或应用程序,WorkManager库也是完成有用任务的不错选择。

一些充分利用WorkManager的任务示例:

上传日志

将滤镜应用于图像并保存图像

定期将本地数据与网络同步

WorkManager提供有保证的执行,并非所有任务都需要。因此,从主线程运行每个任务并不是一件容易的事。有关何时使用WorkManager的更多详细信息,请查看后台处理指南。

WorkManager是Android Jetpack的一部分,是用于后台工作的架构组件,需要结合机会性和有保证的执行。机会执行意味着WorkManager将尽快完成后台工作。保证执行意味着WorkManager将负责在各种情况下开始工作的逻辑,即使您离开应用程序也是如此。

WorkManager是一个简单但非常灵活的库,具有许多额外的好处。这些包括:

支持异步一次性和周期性任务支持网络条件,存储空间和计费状态等约束复杂工作请​​求的链接,包括并行运行工作从一个工作请求输出,用作下一个Handles API级别兼容性的输入返回API级别14(参见注释)使用或不使用Google Play服务遵循系统运行状况最佳实践LiveData支持以在UI中轻松显示工作请求状态


0
投票

有其他人回答说,WorkManager解决了与Kotlin的corountines或RxJava之类的反应库不同的问题。

WorkManager现已作为测试版提供,并且生成了其他文档,希望这些文档能够清晰显示。其中一个文件是我和一些同事一起写的博客文章:Introducing WorkManager,你可以在这里阅读:

关于WorkManager的一个常见错误是,它适用于需要在“后台”线程中运行但不需要在进程死亡中存活的任务。不是这种情况。此用例还有其他解决方案,如Kotlin的协同程序,ThreadPools或RxJava等库。您可以在guide to background processing中找到有关此用例的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.