首页 > 系统相关 >鸿蒙开发——进程模型与进程通信

鸿蒙开发——进程模型与进程通信

时间:2024-11-05 22:46:07浏览次数:3  
标签:订阅 err 鸿蒙 模型 事件 公共 进程 string

1、进程模型

❓ 什么是进程?

进程是一个正在执行的程序的实例。当我们启动一个程序时,操作系统会创建一个进程,分配给它所需的资源,如内存和CPU时间。每个进程至少有一个线程,即执行线程,负责执行程序的指令。进程是操作系统进行资源分配和调度的基本单位,是操作系统提供给用户和应用程序的一个抽象概念。

在鸿蒙的进程模型中,进程被分为三类:主进程(负责UI的进程)、扩展进程(负责大部分ExtensionAbility)、WebView渲染进程(负责网页渲染的独立进程)。

  • 主进程

应用中(同一Bundle名称)的所有UIAbility、ServiceExtensionAbility和DataShareExtensionAbility均是运行在同一个独立进程(主进程)中,如下图中绿色部分的“Main Process”。

仅系统应用支持构建ServiceExtensionAbility和DataShareExtensionAbility
  • 扩展进程(可能有多个)

应用中(同一Bundle名称)的所有同一类型ExtensionAbility(除ServiceExtensionAbility、DataShareExtensionAbility外)均是运行在一个独立进程中,如下图中蓝色部分的“FormExtensionAbility Process”、“InputMethodExtensionAbility Process”、其他ExtensionAbility Process。

  • WebView进程

WebView拥有独立的渲染进程,如下图中黄色部分的“Render Process”。

图片

2、进程间通信方式

在鸿蒙开发中,需要跨进程通信的原因,是因为每个进程都有自己独立的资源和内存空间,其他进程不能随意访问不同进程的内存和资源。

进程间通信一般有两种方式:1)IPC/RPC;2)公共事件机制。

  • IPC/RPC

IPC(Inter-Process Communication): 使用Binder驱动,用于设备内的跨进程通信。

RPC(Remote Procedure Call):使用软总线驱动,用于跨设备跨进程通信。

由于篇幅原因,IPC和RPC在未来的文章中展开介绍
  • 公共事件机制

公共事件机制多用于一对多的通信场景(公共事件发布者可能存在多个订阅者同时接收事件)

基于鸿蒙的进程模型,针对应用间和应用内存在多个进程的情况,推荐使用公共事件机制来实现进程间通信。

3、公共事件机制

CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。

公共事件从系统角度可分为:系统公共事件和自定义公共事件。

  • 系统公共事件:CES内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如HAP安装、更新、卸载等公共事件(系统公共事件参考官方文档定义:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/commoneventmanager-definitions-V5 )

  • 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。

公共事件按发送方式可分为:无序公共事件、有序公共事件和粘性公共事件。

  • 无序公共事件:CES在转发公共事件时,不考虑订阅者是否接收到该事件,也不保证订阅者接收到该事件的顺序与其订阅顺序一致。

  • 有序公共事件:CES在转发公共事件时,根据订阅者设置的优先级等级,优先将公共事件发送给优先级较高的订阅者,等待其成功接收该公共事件之后再将事件发送给优先级较低的订阅者。如果有多个订阅者具有相同的优先级,则他们将随机接收到公共事件。

  • 粘性公共事件:能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。【普通的公共事件只能在订阅后发送才能收到,而粘性公共事件的特殊性就是可以先发送后订阅,同时也支持先订阅后发送。发送粘性事件必须是系统应用或系统服务,粘性事件发送后会一直存在系统中,且发送者需要申请ohos.permission.COMMONEVENT_STICKY权限】

每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。示意图如下:

图片

3.1、发布公共事件

当需要发布某个自定义公共事件时,可以通过publish()方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。发布公共事件接口定义如下:

// 发布简单的公共事件publish(event: string, callback: AsyncCallback)// 指定发布信息并发布公共事件publish(event: string, options: CommonEventPublishData, callback: AsyncCallback)// CommonEventPublishData 结构定义如下:class CommonEventPublishData {// 表示订阅者包名称,只有包名为bundleName的订阅者才能收到该公共事件。bundleName: string// 表示公共事件的结果代码。code: number// 表示公共事件的自定义结果数据。data: string// 表示订阅者的权限。subscriberPermissions: Array<string>// 表示是否是有序事件。isOrdered: boolean// 表示是否是粘性事件。仅系统应用或系统服务允许发送粘性事件。isSticky: boolean// 表示公共事件的附加信息。parameters: {[key: string]: any}}

标签:订阅,err,鸿蒙,模型,事件,公共,进程,string
From: https://blog.csdn.net/harmonyClassRoom/article/details/143532671

相关文章

  • Hunyuan-Large:腾讯发布业界参数规模最大的开源 MoE 模型,支持超长文本输入,超越主流开源
    ❤️如果你也关注大模型与AI的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的AI应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!......
  • 认识鸿蒙Context
    Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类......
  • 鸿蒙项目实战(一):实现首页动态Tab
    需求:存在n个tab页,支持动态设置显示指定某几个tab实现如下:一、定义一个类,定义所有的tab页数据知识点:1、类使用export修饰,可以让其他模块引入2、类内字段设置 staticreadonly,只读静态字段3、图标文件存于src->main->resources->base->media目录下//首页菜单配置expor......
  • pytorch(四)模型训练方法
    训练步骤01importtorchvisionfromtorch.utils.dataimportDataLoaderfromtorchimportnnfrommodelimport*#训练数据集train_data=torchvision.datasets.CIFAR10(root="../data",train=True,transform=torchvision.transforms.ToTensor(),......
  • Flutter+鸿蒙NEXT开发获取系统文件路径
    Flutter+鸿蒙NEXT开发获取系统文件路径在具体的开发过程中,有时需要获取临时目录、文档目录等需求.本文具体讲解怎么在Flutter中可以利用path_provider插件来完成此项工作,OpenHarmonySIG组织对该插件做了鸿蒙NEXT系统的适配,接下来将详细讲解如何利用path_provider插件来获取系统文......
  • 鸿蒙 next 实现应用内的暗黑模式切换
    鸿蒙next实现应用内的暗黑模式切换实现暗黑模式的大致思路是利用@Provider与@Consume共享一个lightMode变量,在页面创建时读取持久化的lightMode,来实现暗黑模式。1.在Entry页面使用@Provide注解lightMode@Entry@ComponentstructQuickTestMainPage{@Providelig......
  • 2024/11/5日 日志 关于BOM浏览器对象模型和DOM文档对象模型的学习与笔记整理
    和Javascript有关的BOM与DOM及事件监听。以下是今天的内容点击查看代码--BOM--BrowserObjectModel浏览器对象模型--JavaScript将浏览器的各个组成部分封装为对象--组成:--Window:浏览器窗口对象--Navigator:浏览器对象--Screen:屏幕对象--History:历史记录......
  • 机器学习实战——基于随机森林与决策树模型的贷款违约预测全过程(附完整代码和可视化分
    机器学习实战——基于随机森林与决策树模型的贷款违约预测全过程(附完整代码和可视化分析)关于作者作者:小白熊作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,语义分割,路径规划,智能优化算法,数据分析,各类创新融合等等。联系邮......
  • 什么是线程?什么是进程?
    什么是线程?什么是进程?它们之间的区别是什么?线程:线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等,但每个线程都有自己独立的程序计数器、栈和寄存器组。......
  • 覆盖80%业务场景,原生鸿蒙出行、教育行业样板间专区上线
    华为原生鸿蒙之夜获得广泛关注,华为官宣鸿蒙生态设备数量已超过10亿台,鸿蒙原生应用和元服务数量已超过15000个,鸿蒙生态已进入飞速发展阶段。为更好地助力各行业开发者降本提效开发鸿蒙原生应用和元服务,华为开发者联盟生态市场(简称生态市场)近日上线了原生鸿蒙出行行业、教育行业“样......