- 原文地址:Introducing WorkManager
- 原文做者:Pietro Maggi
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:Rickon
- 校对者:DevMcryYu
插图来自 Virginia Poltrackhtml
Android 系统处理后台工做有不少注意事项和最佳实践,详见 Google’s Power blog post series。其中一个反复出现的调用是一个名为 WorkManager 的 Android Jetpack 库,它扩展了 JobScheduler 框架 API 的功能,并支持 Android 4.0+(API 14+)。WorkManager 测试版今天刚刚发布!前端
这篇文章是 WorkManager 系列中的第一篇。咱们将探讨 WorkManager 的基础知识,如何以及什么时候使用它,以及幕后发生了什么。而后咱们将深刻研究更复杂的用例。android
WorkManager 是 Android 架构组件之一,也是 Android Jetpack 的一部分,是一个关于如何构建现代 Android 应用程序的新看法。ios
WorkManager 是一个 Android 库,在知足工做的约束条件时运行可延迟的后台工做。git
WorkManager 适用于须要保障的任务,即便应用程序退出,系统也会运行它们。github
换句话说,WorkManager 提供了一个电池友好的 API,它封装了 Android 后台行为限制多年来的演变。这对于须要执行后台任务的 Android 应用程序相当重要!后端
不管应用程序进程是否存在,WorkManager 都会处理在知足各类约束条件时须要运行的后台工做。后台工做能够在应用程序位于后台、前台或者应用在前台打开即将转到后台的时候启动。不管应用程序在作什么,后台工做都应该继续进行,或者在 Android 终止其进程时重启其后台工做。服务器
关于 WorkManager 的一个常见误解是它须要在“后台”线程中运行,但不须要在进程死亡时存活。事实并不是如此。这种用例还有其余解决方案,如 Kotlin 的协程,ThreadPools 或 RxJava 等库。你能够在后台处理指南中找到有关此用例的更多信息。网络
有许多不一样的状况下,你须要运行后台工做,所以须要使用不一样的解决方案来运行后台工做。这篇关于后台运行的博客文章提供了不少关于什么时候使用 Workmanager 的有用信息。请看博客中的此图表:架构
图解来自 Android 中的现代后台运行
对于 WorkManager,最适合处理的是必须完成而且能够延迟的后台工做。
首先,问问你本身:
这个任务须要完成吗? 若是应用程序被用户关闭了,是否仍须要完成任务?一个例子是带有远程同步的笔记应用程序;每次你写完一个笔记,你就会指望该应用程序将你的笔记与后端服务器同步。即便您切换到另外一个应用程序而且操做系统须要关闭应用程序以回收一些内存。即便从新启动设备也会发生这种状况。WorkManager 可以确保任务完成。
这个任务能够延迟吗? 咱们能够稍后运行任务,仍是只在如今运行才能够用?若是任务能够稍后运行,那么它是可延迟的。回到前面的例子,当即同步你的笔记会很好,可是若是不能当即同步而是稍后进行的话也没什么大问题。WorkManager 尊重操做系统后台限制,并尝试以电池高效的方式运行你的工做。
所以,做为指导原则,WorkManager 适用于须要确保系统将运行它们的任务,即便应用程序退出也是如此。它不适用于须要当即执行或须要在确切时间执行的后台工做。若是你须要在准确的时间执行工做(例如闹钟或事件提醒),请使用 AlarmManager。对于须要当即执行但长时间运行的工做,你一般须要确保在前台执行工做;是否经过限制执行到前台(在这种状况下工做再也不是真正的后台工做)或使用前台服务。
当你须要在更复杂的场景中触发一些后台工做时,WorkManager 能够而且应该与其余 API 配对使用:
WorkManager 运行后台工做,同时可以为你处理电池和系统健康的兼容性问题和最佳实践。
此外,你可使用 WorkManager 安排定时任务和复杂的从属任务链:后台工做能够并行或顺序执行,你能够在其中指定执行顺序。WorkManager 无缝地处理任务之间的输入和输出传递。
你还能够设置后台任务运行时间的标准。例如,若是设备没有网络链接,则没有理由向远程服务器发出 HTTP 请求。所以,您能够设置约束条件,该任务只能在网络链接时运行。
做为保证执行的一部分,WorkManager 负责在设备或应用程序重启时保持工做。你也能够轻松地定义重试策略若是你的工做已中止而且您想稍后重试。
最后,WorkManager 容许你观察工做请求的状态,以便你能够更新 UI。
总而言之,WorkManager 提供了如下好处:
让咱们看一个具体的例子,咱们构建一个将过滤器应用于图像的并发任务管道。而后将结果发送到压缩任务,而后发送到上传任务。
咱们能够为这些任务定义一组约束,并指定什么时候能够执行它们:
带有约束的任务链示例
全部这些 workers 都定义了一个精确的序列:咱们不知道过滤图像的顺序,但咱们知道只有在全部过滤器工做完成后,Compress 工做才会启动。
为了确保兼容性达到 API 14 级别,WorkManager 根据设备 API 级别选择适当的方式来安排后台任务。WorkManager 可能使用 JobScheduler 或 BroadcastReceiver 和 AlarmManager 的组合。
WorkManager 如何肯定要使用的调度程序
WorkManager 如今处于测试阶段。这意味着在此主要修订版中不会有重大的 API 变动。
当 WorkManager 稳定版本发布时,它将是运行后台任务的首选方式。 所以,这是开始使用 WorkManager 并帮助改进它的好时机!
感谢 Lyla Fujiwara。
感谢 Florina Munt、Ben Weiss 和 Lyla Fujiwara.
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。