系统的进程模型如下图所示。
- 应用中(同一Bundle名称)的所有UIAbility、ServiceExtensionAbility和DataShareExtensionAbility均是运行在同一个独立进程(主进程)中,如下图中绿色部分的“Main Process”。
- 应用中(同一Bundle名称)的所有同一类型ExtensionAbility(除ServiceExtensionAbility和DataShareExtensionAbility外)均是运行在一个独立进程中,如下图中蓝色部分的“FormExtensionAbility Process”、“InputMethodExtensionAbility Process”、其他ExtensionAbility Process。
- WebView拥有独立的渲染进程,如下图中黄色部分的“Render Process”。
图1 进程模型示意图
说明:
- 仅系统应用支持构建ServiceExtensionAbility和DataShareExtensionAbility。
- 执行hdc shell命令,进入设备的shell命令行。在shell命令行中,执行ps -ef命令,可以查看所有正在运行的进程信息。
在上述模型基础上,对于系统应用可以通过申请多进程权限(如下图所示),为指定HAP配置一个自定义进程名,该HAP中的UIAbility、DataShareExtensionAbility、ServiceExtensionAbility就会运行在自定义进程中。不同的HAP可以通过配置不同的进程名运行在不同进程中。
图2 多进程示意图
基于当前的进程模型,针对应用间和应用内存在多个进程的情况,系统提供了如下进程间通信机制:
公共事件机制 :多用于一对多的通信场景,公共事件发布者可能存在多个订阅者同时接收事件。
线程类型
Stage模型下的线程主要有如下三类:
- 主线程
- 执行UI绘制。
- 管理主线程的ArkTS引擎实例,使多个UIAbility组件能够运行在其之上。
- 管理其他线程的ArkTS引擎实例,例如使用TaskPool(任务池)创建任务或取消任务、启动和终止Worker线程。
- 分发交互事件。
- 处理应用代码的回调,包括事件处理和生命周期管理。
- 接收TaskPool以及Worker线程发送的消息。
- TaskPool Worker线程
- 用于执行耗时操作,支持设置调度优先级、负载均衡等功能,推荐使用。
- Worker线程
- 用于执行耗时操作,支持线程间通信。
TaskPool与Worker的运作机制、通信手段和使用方法可以参考 TaskPool和Worker的对比。
- 用于执行耗时操作,支持线程间通信。
说明
- TaskPool自行管理线程数量,其生命周期由TaskPool统一管理。Worker线程最多创建8个,其生命周期由开发者自行维护。
- 同一线程中存在多个组件,例如UIAbility组件和UI组件都存在于主线程中。在Stage模型中目前主要使用 EventHub 进行数据通信。
- 执行hdc shell命令,进入设备的shell命令行。在shell命令行中,执行ps -p -T命令,可以查看指定应用进程的线程信息。其中,为需要指定的应用进程的 进程ID 。
使用EventHub进行线程内通信
EventHub 提供了线程内发送和处理事件的能力,包括对事件订阅、取消订阅、触发事件等。以UIAbility组件与UI之间的数据同步为例,具体使用方法可以参考 UIAbility组件与UI的数据同步 。
鸿蒙全栈开发全新学习指南
为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线【包含了大厂APP实战项目开发】。
本路线共分为四个阶段:
第一阶段:鸿蒙初中级开发必备技能
第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH
第三阶段:应用开发中高级就业技术
第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH
鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH
写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
gitee.com/MNxiaona/733GH