鸿蒙HarmonyOS实战-Stage模型(线程模型)_stage模式下的线程模型

77 阅读4分钟

线程的使用可以有效地提高程序的性能和资源利用率,特别适用于多任务并发处理的场景,如网络服务器、图形界面应用、多媒体处理等。但线程编程也存在一些挑战和风险,如线程安全、共享资源竞争等问题,需要合理地设计和管理线程使用,以保证程序的正确性和稳定性。

一、线程模型

1.概述

HarmonyOS应用中,每个进程都有一个主线程,主线程具有以下职责:

  1. 执行UI绘制:主线程负责处理应用界面的绘制操作,包括布局、绘制和刷新等。
  2. 管理主线程的ArkTS引擎实例:主线程通过管理ArkTS引擎实例,使得多个UIAbility组件能够在主线程上运行,实现界面的展示和交互。
  3. 管理其他线程的ArkTS引擎实例:主线程还负责管理其他线程(例如Worker线程)的ArkTS引擎实例,包括启动和终止其他线程。
  4. 分发交互事件:主线程接收用户的交互事件,如点击、滑动等,并将这些事件分发给相应的UIAbility进行处理。
  5. 处理应用代码的回调:主线程负责处理应用代码的回调函数,包括事件处理和生命周期管理。例如,当用户触发某个事件时,主线程会调用相应的回调函数进行处理。
  6. 接收Worker线程发送的消息:主线程与Worker线程之间通过消息机制进行通信,主线程接收并处理Worker线程发送的消息。

除了主线程之外,还有一类与主线程并行的独立线程,称为Worker线程。Worker线程主要用于执行耗时操作,但不可以直接操作UI。Worker线程在主线程中创建,与主线程相互独立。一个进程最多可以创建8个Worker线程。

在这里插入图片描述

目前,HarmonyOS提供了两种线程间通信的方式,分别是Emitter和Worker。

  1. Emitter(发射器):Emitter主要适用于线程间的事件同步。它可以在不同的线程之间传递事件,并确保事件的顺序和同步性。通过Emitter,一个线程可以触发一个事件,然后其他线程可以监听并处理这个事件。这有助于不同线程之间的数据共享和协调。
  2. Worker(工作者):Worker主要用于新开一个线程执行耗时任务。当需要执行一些耗时操作时,为了不阻塞主任务的执行,可以使用Worker线程。Worker线程是在主线程的上下文中创建的独立线程,它可以执行一些耗时任务,如网络访问、文件读写等。工作线程可以与主线程并行执行,以提高应用的响应性和性能。

2.Emitter

🦋2.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.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);

3.Worker

🦋3.1 配置文件

以下配置文件都是在build-profile.json5中的
在这里插入图片描述

"buildOption": { "sourceOption": { "workers": [ "./src/main/ets/workers/worker.ts" ] } }

🦋3.2 创建文件

worker.ts文件

import worker from '@ohos.worker';

let parent = worker.workerPort;

// 处理来自主线程的消息 parent.onmessage = function(message) { console.info("onmessage: " + message) // 发送消息到主线程 parent.postMessage("message from worker thread.") }

🦋3.3 使用线程模型

import worker from '@ohos.worker';

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取