概念介紹
- 在 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 線程,避免資源浪費。
參考資料