HarmonyOS鸿蒙Next中ArkTS实现多线程

HarmonyOS鸿蒙Next中ArkTS实现多线程 大家会在前端使用Arkts的worker实现多线程吗,发现好麻烦啊。并且看了很多鸿蒙的开源仓库,大家都是在native侧实现多线程。

3 回复

【背景知识】

ArkTS基于HarmonyOS的Actor并发模型,提供​​TaskPool​​和​​Worker​​两种多线程方案,项目中选用哪种多线程,需要根据业务去选择:

  • TaskPool:适用于轻量级任务的并行处理,内置线程池管理和任务调度,自动优化资源分配。
  • Worker:独立线程环境,支持复杂任务(如耗时计算、I/O操作),需手动管理生命周期。

【解决方案】

  • 如果是轻量级并行任务,优先使用TaskPool,例如批量图片处理,代码案例参考如下:
import { taskpool } from '@kit.ArkTS';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  
  build() {
    Column() {
      Button('TaskPool')
        .onClick(async () => {
          const task = new taskpool.Task(testSync, 'test')
          console.info(`taskpool res is: ${await taskpool.execute(task)}`);
        })
    }
    .height('100%')
    .width('100%')
  }
}

@Concurrent
function testSync(param: string) {
  console.info(`taskpool执行中...${param}`)
  return 'taskPool执行结果'
}
  • 如果是复杂独立任务,优先使用Worker,如后台数据同步、文件读写等操作。
    DevEco Studio支持一键生成Worker模板,代码案例参考如下:
    新建一个TestWorker:
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

workerPort.onmessage = (event: MessageEvents) => {
  console.info(`message: ${event.data}`)
};

workerPort.onmessageerror = (event: MessageEvents) => {
  console.info('表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序')
};

workerPort.onerror = (event: ErrorEvent) => {
  console.info('Worker执行过程当中发生异常')
};

修改build-profile.json5文件

{
  ...
  "buildOption": {
    "sourceOption": {
      "workers": [
        './src/main/ets/workers/TestWorker.ets'
      ]
    }
  },
  ...
}

测试代码案例参考如下:

import { worker } from '@kit.ArkTS';

@Entry
@Component
struct Index5 {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Button('Worker')
        .onClick(() => {
          const workStage: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/TestWorker.ets');
          workStage.postMessage('Hello World!')
        })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中ArkTS实现多线程的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,ArkTS通过TaskPool和Worker模块支持多线程。TaskPool适用于轻量级并行任务,自动管理线程池,可执行无状态函数并返回Promise结果。Worker用于复杂或长时间运行的任务,需创建独立Worker线程,通过消息传递与主线程通信,支持对象序列化传输。两者均基于Actor模型,避免共享内存,确保线程安全。开发者需根据任务类型选择合适方案,TaskPool适合短时并发,Worker适合独立后台任务。

在HarmonyOS Next中,ArkTS的Worker确实需要一定配置,但它是前端多线程的标准方案。开发者通常选择Native侧实现多线程,主要是因为性能敏感任务(如密集计算、图形处理)在C++层效率更高。不过对于UI交互、网络请求等场景,ArkTS Worker依然适用,能有效避免主线程阻塞。

建议先明确业务场景:若涉及复杂计算或跨平台复用,推荐Native开发;若只需简单后台任务,ArkTS Worker通过消息通信即可满足需求。随着生态完善,ArkTS的多线程支持会进一步优化。

回到顶部