
原文来自: Android Jetpack WorkManager Stable Release
使用WorkManager的方式简化您的后台管理
今天我们非常高兴的宣布Android Jetpack WorkManager 1.0 稳定版发布。我们想感谢许多在我们开发社区的您,一路上为我们给予反馈和bug记录 —— 我们到达了这里,感谢您的帮助!
当我们通过开发者看到面临的主要问题时,我们看见了做可靠的后台处理和友好的电量管理是一个巨大的挑战。这意味着定期刷新内容或者上传您的日志是复杂的。不同的Android版本为工作提供了不同的工具,它们每一个都有自己怪异的API。比如说,监听网络或者存储可用性以及自动重试您的任务涉及到大量工作。
我们对于这些挑战的回答是WorkManager。在Google I/O 2018上,我们介绍了Android Jetpack WorkManager库的预览,并且从那之后在它上面迭代了额外的功能核和bug修复,感谢您宝贵的意见。
WorkManager的目标就是为了您操作后台使其简单。WorkManager考虑到了像电量优化、存储或者网络可用性的约束,同事当满足适当的条件它只能运行它的任务。它也知道去重试或者重新调度您的工作——即使您的设备或者app重启了。
我们相信WOrkManager是友好的,亲切的API,能够处理好Android最复杂的部分之一,您可以将焦点放在让您的App独特代码上。
WorkManager 亮点
这里是WorkManager一些关键点:
- 让您设置约束,比如网络状态或者充电状态、任务在运行时
- 支持异步一次性和周期性
- 支持带输入和输出的链式任务
- 确保任务执行,及时APP或者设备重启
- 支持Android 4.0+ (API 14+)
观看和阅读下面去学习在您的APP里面什么时候以及如何使用WorkManager去简化管理后台工作
Android Jetpack: 介绍WorkManager
何时使用 WorkManager
WorkManager是针对于能够被延期任务的最佳套件,但是即使是应用程序或者设备重启(比如: 使用后端服务定期同步数据以及上传日志或者分析数据) 也是仍然有望运行
对于像需要立即运行去发送即时消息或者APP在退出之后不需要立即运行的任务,去看看后台处理向导 了解哪一种解决方案满足您的需求。
如何使用 WorkManager
开始使用WorkManager API, 添加在Google’s Maven repository上WorkManager可用的Java或者Kotlin依赖到您应用程序的build.gradle
文件:
1 | dependencies { |
现在,只需要将Worker子类化并利用doWork()实现您的后台工作,并用WorkManager加入列队。
1 | class MyWorker(ctx: Context, params: WorkerParameters) |
WorkManager当识别到您的设备正在充电且网络是可用时,它将负责运行您的任务。
为何使用 WorkManager
向后兼容
WorkManager将利用正确的调度API:它使用了JobScheduler API在Android 6.0+ (API 23+)并且结合了之前版本上的AlarmManager和BroadcastReceiver
它也力求最佳行为,这样它就符合了在较新的Android API版本中引入系统优化去最大化电量和强制执行良好的APP行为。
比如说,当系统是进入了Doze 模式时,对于Android 6.0+(API 23+)的设备,WorkManager将在维护窗口期间调度后台工作。
可靠的调度
利用WorkManager,您能够简单的添加像网络可用性或者充电状态的约束。当约束满足您的工作将会运行,并且如果在运行的过程中它们失败了将会自动重试。比如说,如果您的任务要求网络可用,当网络不再可用时任务将会停止并且之后重试。
您也能够使用LiveData监控工作状态和检索工作结果。当您的任务完成时,这样可以通知您的UI。
您的工作失败了的情况下,您可用通过配置backoff(退避)的处理方式来控制您的工作重试方式
WorkManager也能够重新调度您的工作,如果一个应用程序或者设备重启发生了,使用本地数据库记录您的工作。
控制您的工作方式
我们明白每一个APP有不同的需求,您的任务也如此——甚至是在同一个APP内。WorkManager提供了简单但高度灵活的API表面,可以帮助您配置您的工作和运行它的方式。
利用OneTimeWorkRequest一次性调度或者PeriodicWorkRequest周期性调度
您也能够链接您的一次工作请求以按顺序或并行运行。如果任意链接工作失败,WorkManager力求确保剩下的工作链不会运行。阅读更多关于链接工作请求这里
如果您需要更多灵活性的WorkManager并行化方式以及消息工作,检出我们高级线程向导
开发者有说什么
redBus ,最大在线巴士票务平台,分享他们使用WorkManager的经验,以简化他们在Android应用中收集用户反馈的方式:
“随着我们扩展到其他国家,反馈对于readBus至关重要。一个用户给予了关于在redBus应用程序中功能至关重要的反馈,但是当应用程序尝试去上传反馈到后端,这儿或许没有足够的网络覆盖或者电量
WorkManager简化了redBus应用程序向后端提供信息的方式。WorkManager库处理像网络连接、电量参数的能力以及使用像AlarmManager或者JobScheduler适当的处理程序,使我们能够专注于构建业务逻辑并将执行复杂性卸载到WorkManager
—— Dinesh Shanmugam
Android Lead, redBus.in
开始使用 WorkManager
根据您后台任务的需要,检出我们开始使用向导和codelab动手去使用WorkManager库
我们欣赏您的反馈,包括您喜欢的新功能以及您希望看到的新功能
如果您发现了一个bug或者issue,随时提出问题
以上是对Android官网博客文章的翻译,如果不足,欢迎指正,谢谢