WorkManager 在多进程应用中的高级用法

简介: 在 WorkManager 2.5 中,我们让多进程应用能够更容易地访问在指定进程中运行的特定 WorkManager 实例。

现在,我们更是在 WorkManager 2.6 中进一步增加了能够让 Worker 在任意进程中运行的支持,并且能将 Worker 绑定到指定的进程。多进程支持对于需要在多个进程中运行 Worker 的应用非常有用。

虽然大多数应用只需要一个进程就能良好地工作,但有些应用则需要多个进程来完成它们的工作,这在过去很难管理不同进程之间的工作,但现在一切都不一样了!

从 WorkManager 2.6 开始,您可以使用 RemoteListenableWorker 或 RemoteCoroutineWorker 将 Worker 绑定到特定进程。

如果您使用 Kotlin 来实现 Worker,请使用 RemoteCoroutineWorker,而其他情况则使用 RemoteListenableWorker。在本文中我们的示例将使用 Kotlin 来实现,我们也在下面的示例链接中提供了相似的 Java 实现。

RemoteCoroutineWorker 实现起来和 CoroutineWorker 很相像,但不用覆写 doWork,而是覆写 doRemoteWork,并在生成 WorkRequest 时将 ARGUMENT_CLASS_NAME 和 ARGUMENT_PACKAGE_NAME 两个参数传入 InputData 来将其绑定到特定进程。

val PACKAGE_NAME = "com.example.background.multiprocess"

// RemoteWorkerService 被添加到应用的 AndroidManifest.xml
val serviceName = RemoteWorkerService::class.java.name
val componentName = ComponentName(PACKAGE_NAME, serviceName)

val data: Data = Data.Builder()
   .putString(ARGUMENT_PACKAGE_NAME, componentName.packageName)
   .putString(ARGUMENT_CLASS_NAME, componentName.className)
   .build()

return OneTimeWorkRequestBuilder<ExampleRemoteCoroutineWorker>
   .setInputData(data)
   .build()

然后您需要像这样为每个 RemoteWorkerService 在 AndroidManifest 中添加 service 定义:

<manifest ... >
    <service
            android:name="androidx.work.multiprocess.RemoteWorkerService"
            android:exported="false"
            android:process=":worker1" />

    <!-- RemoteWorkerService2 extends RemoteWorkerService -->    
    <service
            android:name=".RemoteWorkerService2"
            android:exported="false"
            android:process=":worker2" />
    ...
</manifest>

您可以在新的 WorkManager 多进程示例 中了解这些新功能如何工作,它同时使用 RemoteCoroutineWorker 和 RemoteListenableWorker 实现。

您还可以在我们的 发布说明 中看到在 WorkManager 2.6 发生的变更和改进的详细列表。

如果你想开发小程序或者了解小程序更多的内容,可以通过第三方专业开发平台,来帮助你实现开发需求:厦门在乎科技-专注厦门小程序开发公司、app开发、网站开发、H5小游戏开发

相关文章
|
2月前
|
存储 安全 算法
【C++智能指针 相关应用】深入探索C++智能指针:跨进程、动态库与最佳实践
【C++智能指针 相关应用】深入探索C++智能指针:跨进程、动态库与最佳实践
86 5
|
8月前
|
应用服务中间件 nginx Windows
windows下DOS命令杀掉Nginx应用进程
windows下DOS命令杀掉Nginx应用进程
|
2月前
|
负载均衡 JavaScript 算法
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
77 1
|
8月前
|
Linux
Linux杀死同一个应用的所有进程
Linux杀死同一个应用的所有进程
|
2月前
|
弹性计算 Dubbo Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中,生成图片时进程卡住如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4天前
|
Shell Linux
【linux】进程替换的应用|shell解释器的实现
【linux】进程替换的应用|shell解释器的实现
9 0
|
20天前
|
运维 JavaScript Serverless
Serverless 应用引擎产品使用合集之函数计算里中FC出现函数还没有执行完进程就关闭了是什么导致的
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
机器学习/深度学习 监控 调度
深度学习在图像识别中的应用与挑战深入理解操作系统中的进程调度策略
【5月更文挑战第27天】 随着人工智能技术的飞速发展,深度学习已经成为图像识别领域的核心技术。本文将探讨深度学习在图像识别中的应用,以及在实际应用中所面临的挑战。我们将介绍深度学习的基本原理,以及如何将其应用于图像识别任务中。此外,我们还将讨论在实际应用中可能遇到的一些问题,如数据不平衡、模型过拟合等,并提出相应的解决方案。
|
2月前
|
消息中间件 Linux API
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
56 1
Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践
|
2月前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)