在arkts中如何执行耗时任务?

在android中,有AsyncTask ,可以让耗时的任务后台执行,只返回给UI线程结果。在arkts中如何做呢?让不阻塞UI 线程,同时可以给UI反馈结果?


arkts
2025-03-27 16:11:50
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
一路向北545

创建 Worker 文件(如 ​workers/MyWorker.ts​


// workers/MyWorker.ts
import worker from '@ohos.worker';

let parentPort = worker.parentPort;

// 监听主线程消息
parentPort.onmessage = function(message) {
  // 执行耗时任务(如数据处理)
  let result = heavyTask(message.data);
  // 将结果发送回主线程
  parentPort.postMessage(result);
};

function heavyTask(data) {
  // 模拟耗时操作
  for (let i = 0; i < 1e9; i++) { /* 计算 */ }
  return data.toUpperCase();
}

主线程中启动 Worker

// 主线程代码
import worker from '@ohos.worker';

let myWorker = new worker.ThreadWorker('workers/MyWorker.ts');

// 向 Worker 发送任务
myWorker.postMessage("hello");

// 接收 Worker 返回的结果
myWorker.onmessage = function(message) {
  console.log('Result from Worker:', message.data);
  // 更新 UI(需在 UI 线程操作)
};

// 任务完成后销毁 Worker
myWorker.terminate();

注意

  • Worker 文件需放在entry/src/main/ets/workers 目录下。
  • 不支持直接操作 UI,需通过postMessage 通信。
分享
微博
QQ
微信
回复
2025-03-27 19:15:18
相关问题
HarmonyOS 主线程耗时任务,app闪退
1090浏览 • 1回复 待解决
ArkTS如何处理耗时操作?
1578浏览 • 1回复 待解决
如何申请多个长时任务
3093浏览 • 1回复 待解决
HarmonyOS 延时任务
909浏览 • 1回复 待解决
如何在构建任务执行shell脚本
1315浏览 • 1回复 待解决