如何使用 Android 工作管理器?
我们在 WorkManager 2.6 中更进一步,增加了对 Workers 在任何流程中操作的支持,并允许将 worker 绑定到特定流程。多进程功能对于需要Workers在不同进程中操作的程序非常有利。大多数应用程序在一个进程中运行良好。另一方面,那些需要多个流程的企业很难协调流程之间的工作。 WorkManager API 使计划必须一致完成的可延迟异步活动变得简单。这些 API 允许您构建任务并将其提供给 WorkManager 以在满足工作限制时执行。
定义任务
Worker 类用于定义工作。 doWork()函数在 WorkManager 提供的后台线程上异步执行。
V2.6 中有什么新功能?
从 WorkManager 2.6 开始,您可以使用 RemoteListenableWorker 或 RemoteCoroutineWorker 将 worker 绑定到特定进程。 RemoteCoroutineWorker 应该用于用 Kotlin 编写的工作程序。否则,应使用 RemoteListenableWorker。在这篇文章中,我们将展示如何在 Kotlin 中创建一个 Worker,但是对于类似的Java实现,
请参阅下面链接的示例:
可以像 CoroutineWorker 一样构造 partialWorkMonitor。不是覆盖 doWork,而是覆盖 doRemoteWork,然后使用在构造工作请求时作为输入数据的一部分提供的两个额外参数绑定到特定进程: ARGUMENT PACKAGE NAME 和 ARGUMENT CLASS NAME:
Kotlin
val PACKAGE_NAME = "com.geeksforgeeks.android
val primaryName = CourtineServerBackend::class.java.name
val tertiaryName = ComponentName(PACKAGE_NAME, primaryName)
val data: Data = Data.Builder()
.putString(NAME_OF_FILE, someName.packageName)
.putString(NAME_OF_FILE, someName.className)
.build()
return OneTimeWorkRequestBuilder
.setInputData(data)
.build()
此外,您还必须在 AndroidManifest 中为每个 RemoteWorkerService 额外提供服务定义,如下所示:
...
结论
以前,如果 ActivityManager 无法实例化 JobService 来开始作业,则由于底层平台问题,该作业将被悄悄地删除。创建应用程序实例时,WorkManager 现在通过协调 WorkRequest 对象与作业来保证每个 WorkRequest 都有一个后备调度程序任务。