0
点赞
收藏
分享

微信扫一扫

鸿蒙 线程模型

老榆 03-14 22:30 阅读 3

一、概念

主线程即UI 线程,通过Emitter进行线程间通信(类似Handler),用于主线程内及和Worker线程的事件同步。

Worker线程即工作线程,执行耗时任务。(这里明确指出来是用于耗时任务,实际上Android中新开线程可用于cpu计算、耗时等任务。不确定是否可以同样使用)

1.主线程

使用Emitter进行线程间通信

1.订阅
import emitter from "@ohos.events.emitter";

// 定义一个eventId为1的事件
let event = {
    eventId: 1
};

// 收到eventId为1的事件后执行该回调
let callback = (eventData) => {
    console.info('event callback');
};

// 订阅eventId为1的事件
emitter.on(event, callback);
2.发送
import emitter from "@ohos.events.emitter";

// 定义一个eventId为1的事件,事件优先级为Low
let event = {
    eventId: 1,
    priority: emitter.EventPriority.LOW
};

let eventData = {
    data: {
        "content": "c",
        "id": 1,
        "isEmpty": false,
    }
};

// 发送eventId为1的事件,事件内容为eventData
emitter.emit(event, eventData);

eventId相当于msgId,用来区分消息。
事件优先级的说明是怎样的?

2.Worker线程

如果宿主是UI 线程,那么该Worker线程是不是UI 线程?

1.配置

在工程的模块级build-profile.json5文件的buildOption属性中添加配置信息。

  "buildOption": {
    "sourceOption": {
      "workers": [
        "./src/main/ets/workers/worker.ts"
      ]
    }
  }
2.订阅及发送
import worker from '@ohos.worker';

let wk = new worker.ThreadWorker("entry/ets/workers/worker.ts");

// 发送消息到worker线程
wk.postMessage("message from main thread.")

// 处理来自worker线程的消息
wk.onmessage = function(message) {
    console.info("message from worker: " + message)

    // 根据业务按需停止worker线程
    wk.terminate()
}

相较于UI线程,多了配置的一步。(猜测是为了减少包大小?但是这么重要的包,理论上应该要集成进SDK的,而不是依靠配置来引入。可能有其他原因。总体而言,多了一步就复杂了一些。)

举报

相关推荐

0 条评论