Android Jetpack WorkManager 稳定发布

原文来自: 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_introducing_workmanager

Android Jetpack: 介绍WorkManager

何时使用 WorkManager

WorkManager是针对于能够被延期任务的最佳套件,但是即使是应用程序或者设备重启(比如: 使用后端服务定期同步数据以及上传日志或者分析数据) 也是仍然有望运行

对于像需要立即运行去发送即时消息或者APP在退出之后不需要立即运行的任务,去看看后台处理向导 了解哪一种解决方案满足您的需求。

如何使用 WorkManager

开始使用WorkManager API, 添加在Google’s Maven repository上WorkManager可用的Java或者Kotlin依赖到您应用程序的build.gradle文件:

1
2
3
4
5
6
7
8
9
dependencies {
def work_version = 1.0.0

// Java
implementation "android.arch.work:work-runtime:$work_version"

// Kotlin KTX + coroutines
implementation "android.arch.work:work-runtime-ktx:$work_version"
}

现在,只需要将Worker子类化并利用doWork()实现您的后台工作,并用WorkManager加入列队。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MyWorker(ctx: Context, params: WorkerParameters)
: Worker(ctx, params) {
override fun WorkerResult doWork() {

//在这里完成一些需要在后台处理的工作
.....
return Result.success()
}
}

// 可选, 添加像电源、网络可用性的约束
val constraints: Constraints = Constraints.Builder()
.setRequiresCharging(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()

val myWork = OneTimeWorkRequestBuilder<MyWorker>()
.setConstraints(constraints).build()

// 现在,列队您的工作
WorkManager.getInstance().enqueue(myWork)

WorkManager当识别到您的设备正在充电且网络是可用时,它将负责运行您的任务。

为何使用 WorkManager

向后兼容

WorkManager将利用正确的调度API:它使用了JobScheduler API在Android 6.0+ (API 23+)并且结合了之前版本上的AlarmManagerBroadcastReceiver

它也力求最佳行为,这样它就符合了在较新的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官网博客文章的翻译,如果不足,欢迎指正,谢谢

0%