Worker 进行多线程任务开发
概念介绍
- 在 OpenHarmony 中,UI 线程负责处理 UI 事件和用户交互,而 Worker 线程用于处理耗时操作,以提高应用程序的响应速度和用户体验。
- Worker 线程是与主线程并行的独立线程,通常用于执行后台任务。需要注意的是,Worker 线程中不能直接修改 UI 元素,UI 更新必须在 UI 线程中进行。
API 接口
- 文章介绍了
@ohos.worker
模块,该模块提供了创建 Worker 线程的构造函数接口,并为 UI 线程和 Worker 线程提供了线程间通信的接口。 - 详细 API 能力信息可以参考官方文档。
宿主线程与 Worker 线程的通信
- 宿主线程通过
postMessage
接口向 Worker 线程发送消息,并通过onmessage
事件监听接口处理从 Worker 线程接收到的消息。 - Worker 线程通过
postMessage
接口向宿主线程发送消息,并通过onmessage
事件监听接口处理从宿主线程接收到的消息。
线程的关闭和销毁
- Worker 线程的生命周期通常跟随应用,应用退出时释放 Worker 资源。
- 可以通过
worker.terminate()
在宿主线程中主动销毁 Worker 线程,或者通过workerPort.close()
在 Worker 线程中主动销毁。
开发步骤
- 使用 DevEco Studio 创建 Worker 文件,并在
build-profile.json5
中添加配置。 - 在宿主线程中创建 Worker 实例,并通过
sendMessage
发送消息,通过onmessage
监听接收消息。 - 在 Worker 线程中,通过
ThreadWorkerGlobalScope
实例的postMessage
和onmessage
接口与宿主线程通信。
build-profile.json5
主线程接收和发送消息:
worker 线程中通过 onmessage 接收主线程发过来的消息。
通过 postMessage 向主线程发送消息。
注意事项
- Worker 线程不可以直接操作 UI,需要通过其他方式(如 AppStorage)进行传值。
- 及时销毁不再使用的 Worker 线程,避免资源浪费。