鸿蒙OS 5.0 服务能力框架深入剖析

鸿蒙OS 5.0 服务能力框架中关键类的作用分析

1\. 鸿蒙OS 5.0 服务能力框架导论

鸿蒙OS 5.0,亦称鸿蒙智联 5 1,标志着华为在分布式操作系统领域迈出的重要一步。与早期版本采用兼容安卓的AOSP层、Linux内核以及LiteOS内核不同,鸿蒙OS 5.0 专注于一个统一的微内核架构,旨在提供更强的安全性与更高的性能 1。这种架构的转变对进程间通信机制产生了深远的影响,而进程间通信正是服务能力框架的核心。操作系统的分层架构,从底层的内核层到系统服务层、框架层,再到应用层,为理解服务能力及其相关类在整个系统中的位置提供了基础 3。框架层为开发者提供了创建鸿蒙应用所需的工具,这其中就包含了服务能力框架以及支持多种编程语言的应用程序框架 1。

服务能力(Service Ability,SA)是鸿蒙OS应用的重要组成部分,它与提供用户交互界面的特性能力(Feature Ability,FA)相对应,主要负责处理后台任务并向其他应用或能力提供服务 1。服务能力拥有自身的生命周期,可以被其他能力启动并保持运行,也可以被连接并断开连接,允许多个客户端同时连接到同一个服务能力 5。鉴于服务能力常常需要在不同的进程中运行以实现更好的隔离性和系统稳定性,高效且可靠的进程间通信(Inter-Process Communication,IPC)就显得至关重要 2。在鸿蒙OS 5.0的服务能力框架中,IRemoteBroker、IRemoteStub、IRemoteProxy、IRemoteObject 和 SystemAbility 这五个关键类正是实现和管理这种跨进程通信以及系统级服务的核心组件。理解它们各自的作用以及它们之间的协作方式,对于深入掌握鸿蒙OS 5.0的服务能力开发至关重要。

2\. IRemoteBroker:接口代理人

IRemoteBroker 接口在鸿蒙OS的进程间通信中扮演着至关重要的角色。从本质上讲,它定义了一种契约,用于表示可以被远程访问的对象 6。当一个服务希望将其功能暴露给其他进程时,它会实现一个继承自 IRemoteBroker 的接口。IRemoteBroker 的核心目的是提供一种获取远程对象代理的方式 6。

服务接口通常会继承 IRemoteBroker,这表明该接口定义的方法可以被跨进程调用 6。例如,在代码示例中,IGameInterface 和 ITestAbility 都继承自 IRemoteBroker 6。这种继承关系确保了这些接口遵循鸿蒙OS进程间通信框架的要求,并能够被框架识别和管理为远程服务。一个关键的方法通常与 IRemoteBroker 关联,即 asObject() 7。服务提供者通过实现这个方法返回其自身的 IRemoteObject 实例(通常是 IRemoteStub 的子类),而客户端则通过这个方法获取到远程服务的代理对象 (IRemoteProxy)。因此,IRemoteBroker 不仅是一个标记接口,更重要的是,它提供了一个入口点,使得客户端能够获得与远程服务进行通信的本地代理。

3\. IRemoteStub:服务端的终点

IRemoteStub 是一个抽象基类,它位于服务提供者一侧,负责接收和处理来自远程代理的调用请求 6。当客户端通过 IRemoteProxy 发起一个远程方法调用时,这个请求最终会到达服务端的 IRemoteStub 实例。IRemoteStub 的主要功能在于接收、解封(unmarshalling)来自远程代理的调用请求,并将结果进行封装(marshalling)后返回给远程调用者 7。

IRemoteStub 通常会提供一个关键的抽象方法 OnRemoteRequest() 7。服务开发者需要继承 IRemoteStub 并重写这个方法,以定义如何处理来自不同远程调用的请求。OnRemoteRequest() 方法会接收到调用的代码(transaction code)、包含参数的 MessageParcel 数据包、用于返回结果的 MessageParcel 回复包,以及其他选项 6。在 OnRemoteRequest() 的实现中,开发者需要根据不同的调用代码,从输入的 MessageParcel 中读取参数(解封),然后调用实际的服务实现方法,并将方法的返回值写入到输出的 MessageParcel 中(封装)6。例如,在 GameServiceStub 的代码示例中,onRemoteRequest 方法根据 code 判断是哪个远程方法被调用,然后从 data 中读取参数并执行相应的操作 8。IRemoteStub 的存在极大地简化了服务端处理远程调用的复杂性,它将底层的IPC细节抽象出来,使得开发者可以专注于实现服务的业务逻辑。

4\. IRemoteProxy:客户端的代表

IRemoteProxy 类是客户端在本地持有的远程服务代理,它实现了与服务端相同的服务接口(继承自 IRemoteBroker)6。IRemoteProxy 的作用是作为客户端本地代理,将客户端的方法调用转化为跨进程通信,并处理返回结果 6。当客户端想要调用远程服务的方法时,它实际上是在调用 IRemoteProxy 上的方法。

IRemoteProxy 的关键功能在于拦截客户端的方法调用,并将这些调用转化为可以通过进程间通信发送的消息 6。这个过程包括将方法名和参数封装到 MessageParcel 对象中(marshalling)。IRemoteProxy 内部持有一个 IRemoteObject 的实例,这个 IRemoteObject 代表了远程的服务端对象。当 IRemoteProxy 上的方法被调用时,它会使用这个 IRemoteObject 的 SendRequest() 方法将封装好的消息发送到服务端 6。SendRequest() 方法需要指定调用的代码(通常在服务接口中定义)、包含参数的 MessageParcel、用于接收返回值的 MessageParcel,以及其他选项。在发送请求后,SendRequest() 会等待服务端的响应。一旦收到响应,IRemoteProxy 会从回复的 MessageParcel 中读取返回值(unmarshalling),并将其返回给客户端的调用者 6。例如,在 GameServiceProxy 的代码示例中,action 方法将 deviceId 和 action 参数写入 data,然后通过 remoteObject.sendRequest() 发送到服务端 8。IRemoteProxy 的设计使得客户端能够像调用本地对象一样调用远程服务,而无需关心底层的IPC细节。

5\. IRemoteObject:跨进程的信道

IRemoteObject 接口是鸿蒙OS中跨进程传递的远程对象的抽象表示 8。它的意义在于提供了一个底层的通信机制,使得不同进程中的对象可以相互引用和交互。IRemoteStub 和 IRemoteProxy 实际上都是通过 IRemoteObject 的实例进行通信的 6。

服务端的 IRemoteStub 本身就是一个 IRemoteObject 的实现 8。当一个服务能力被连接时,它的 onConnect() 方法会返回一个 IRemoteObject 实例(通常是 IRemoteStub 的子类)给连接的客户端 10。客户端接收到这个 IRemoteObject 后,会使用它来创建 IRemoteProxy,从而与远程服务进行交互 9。IRemoteObject 提供了一个核心方法 SendRequest(),用于发送IPC消息 6。IRemoteProxy 使用这个方法将封装好的请求发送给服务端的 IRemoteStub。同样,服务端接收到请求后,也会通过 IRemoteObject 将处理结果发送回客户端。IRemoteObject 的抽象性在于它隐藏了底层的进程边界和通信细节,为上层的 IRemoteStub 和 IRemoteProxy 提供了统一的通信接口。

6\. SystemAbility:系统服务的基础

SystemAbility 类在鸿蒙OS中扮演着提供系统级功能和服务的核心角色 11。虽然提供的资料中没有直接给出 SystemAbility 的详细定义,但可以推断出它代表了操作系统中的一个独立功能或服务,例如蓝牙、Wi-Fi 或 NFC 11。SystemAbility 可能是 SystemCapability (SysCap) 的具体实现 11。SystemCapability 描述了操作系统的某种能力,而 SystemAbility 则是提供这些能力的实际组件。

一个 SystemAbility 的生命周期通常包括注册、发布和被其他进程发现和使用的过程。在系统启动时,各种系统服务可能会将自己注册到系统的某个中心管理机构。注册过程可能涉及到为该服务分配一个唯一的标识符。发布是指将该服务的存在和可用性告知其他进程。其他进程可以通过特定的系统API查询和发现已发布的 SystemAbility 实例 12。一旦发现目标 SystemAbility,进程就可以建立与其的连接,并使用其提供的功能。这个连接过程可能涉及到前面讨论的 IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 机制。例如,一个 SystemAbility 可能会实现一个继承自 IRemoteBroker 的接口,并在其 onConnect() 方法中返回一个 IRemoteStub 实例,供客户端通过 IRemoteProxy 进行访问。虽然具体的注册、发布和发现机制在提供的资料中没有详细说明,但可以肯定的是,SystemAbility 是鸿蒙OS提供系统级服务的关键基础设施。

7\. 标准鸿蒙OS 5.0 SA 架构中的相互关系和协同工作方式

在标准的鸿蒙OS 5.0 服务能力架构中,IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 紧密协作,共同实现了高效的跨进程通信。SystemAbility 则作为系统级服务的基础,可能利用这些通信机制向其他进程提供服务。

当一个服务能力(可能是自定义的应用服务,也可能是 SystemAbility)希望被其他进程访问时,它会定义一个继承自 IRemoteBroker 的服务接口。该服务能力的实现类会继承自 IRemoteStub(或者直接继承自 RemoteObject 并实现服务接口)。在服务能力启动并准备好接受连接时,它的 onConnect() 方法会返回一个 IRemoteStub 的实例,这个实例同时也是一个 IRemoteObject 10。

客户端进程想要使用这个服务时,会通过特定的机制(例如,使用 connectAbility() 方法 13)与服务建立连接。连接成功后,客户端会获得一个代表远程服务的 IRemoteObject。为了方便地调用远程服务的方法,客户端通常会使用这个 IRemoteObject 创建一个本地的 IRemoteProxy。这个 IRemoteProxy 实现了与服务端相同的服务接口(继承自 IRemoteBroker)。

现在,当客户端调用 IRemoteProxy 上的一个方法时,IRemoteProxy 会将方法名和参数封装成一个 MessageParcel,然后通过其持有的 IRemoteObject 将这个请求发送到服务端进程。在服务端进程中,IRemoteStub 接收到这个请求,它会解封 MessageParcel 中的参数,并根据请求的标识符(transaction code)调用实际的服务实现方法。服务方法执行完毕后,IRemoteStub 会将结果封装到另一个 MessageParcel 中,并通过相同的 IRemoteObject 发送回客户端进程。客户端进程中的 IRemoteProxy 接收到这个包含结果的 MessageParcel 后,会解封结果并将其返回给客户端的调用者。

下表总结了这五个关键类在鸿蒙OS 5.0 服务能力框架中的角色和主要功能:

表 1: 鸿蒙OS 5.0 服务能力框架中关键类的角色和职责

类名

角色

主要功能

IRemoteBroker

远程接口的契约

定义远程通信的接口规范;提供获取底层 IRemoteObject 或 IRemoteProxy 的方式。

IRemoteStub

服务端请求处理的终点

接收IPC消息,解封参数,调度调用到服务实现,封装结果返回给调用者。

IRemoteProxy

客户端远程服务的本地代理

拦截方法调用,将参数封装成IPC消息,通过 IRemoteObject 发送请求,接收响应,解封结果并返回给客户端。

IRemoteObject

跨进程通信的底层抽象

提供进程间通信的基础通道;被代理用于发送请求,被存根用于接收请求。

SystemAbility

系统级服务的基础

封装并提供系统功能(可能与 SystemCapability 相关);管理其生命周期(注册、发布、发现)。

通过这种精巧的设计,鸿蒙OS 5.0 的服务能力框架实现了高效、安全且易于使用的跨进程通信机制,为构建复杂的分布式应用和管理系统级服务提供了坚实的基础。

8\. 结论

鸿蒙OS 5.0 的服务能力框架依赖于 IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 这四个核心类的紧密协作来实现跨进程通信。IRemoteBroker 作为远程接口的蓝图,定义了服务可以提供的功能。IRemoteStub 充当服务端的消息处理器,负责接收和分发远程调用。IRemoteProxy 则作为客户端的代表,将本地的方法调用转化为远程请求。IRemoteObject 是连接客户端和服务端的桥梁,提供了底层的通信通道。而 SystemAbility 作为系统级服务的基础,很可能也利用了这些机制来向其他进程提供操作系统的核心功能。

这些类的协同工作方式不仅实现了模块化,使得不同的功能可以作为独立的服务运行,而且提高了代码的重用性,因为多个客户端可以连接到同一个服务能力。通过精心设计的封装和解封机制,鸿蒙OS 5.0 实现了高效的跨进程通信,这对于构建复杂的分布式应用和确保系统的稳定性和安全性至关重要。理解这五个关键类的作用及其相互关系,是深入学习和开发鸿蒙OS 5.0 服务能力的关键。

引用的著作

  1. HarmonyOS NEXT \- Wikipedia, 访问时间为 三月 28, 2025, https://en.wikipedia.org/wiki/HarmonyOS\_NEXT

  2. HarmonyOS/README.md at master \- GitHub, 访问时间为 三月 28, 2025, https://github.com/Awesome-HarmonyOS/HarmonyOS/blob/master/README.md

  3. Digging into Harmony OS Internals | by Jasper Morgan | Snapp Mobile \- Medium, 访问时间为 三月 28, 2025, https://medium.com/snapp-mobile/digging-into-harmony-os-internals-fb48d822e65a

  4. Intermediate: Ability Framework in HarmonyOS Part-1 | by Shiddalingeshwar M S \- Medium, 访问时间为 三月 28, 2025, https://shikkerimath.medium.com/intermediate-ability-framework-in-harmonyos-part-1-22a16ba086a8

  5. Service Ability Lifecycle-Service Ability-Ability-Ability Framework ..., 访问时间为 三月 28, 2025, Document

  6. 鸿蒙开发HarmonyOS IPC与RPC通信-腾讯云开发者社区-腾讯云, 访问时间为 三月 28, 2025, 鸿蒙开发HarmonyOS IPC与RPC通信-腾讯云开发者社区-腾讯云

  7. HarmonyOS跨进程通信—IPC与RPC通信开发-华为开发者问答| 华为 ..., 访问时间为 三月 28, 2025, 华为开发者问答 | 华为开发者联盟

  8. \[HarmonyOS\] Part 2—How to connect a Harmony OS app with an ..., 访问时间为 三月 28, 2025, https://www.reddit.com/r/HuaweiDevelopers/comments/nozpmd/harmonyos\_part\_2how\_to\_connect\_a\_harmony\_os\_app/

  9. \[HarmonyOS\] Part 1—How to connect a Harmony OS app with an ..., 访问时间为 三月 28, 2025, https://www.reddit.com/r/Huawei/comments/npocmw/harmonyos\_part\_1how\_to\_connect\_a\_harmony\_os\_app/

  10. Beginner: Service Ability features in Huawei Harmony OS \- HUAWEI Developer Forum, 访问时间为 三月 28, 2025, HUAWEI Developer Forum | HUAWEI Developer

  11. SystemCapability \- Huawei, 访问时间为 三月 28, 2025, Document

  12. Version Overview-HarmonyOS 5.0.1 Release-Release Notes \- HUAWEI Developers, 访问时间为 三月 28, 2025, Document

  13. HarmonyOS API:@ohos.rpc (RPC通信) \- 鸿蒙开发者社区, 访问时间为 三月 28, 2025, HarmonyOS API:@ohos.rpc (RPC通信)-鸿蒙开发者社区-51CTO.COM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二层综合实验

拓扑图 实验要求 1.内网IP地址使用172.16.6.0/16分配 2.sw1和sW2之间互为备份 3.VRRP/STP/VLAN/Eth-trunk均使用 4.所有Pc均通过DHCP获取IP地址 5.ISP只能配置IP地址 6.所有电脑可以正常访问IsP路由器环回 实验思路 这是一个二层综合实验每当拿到一个实验看清楚要求之后都有…

PS 切割图片

选择矩形工具绘制矩形 选中全部矩形,旋转一下角度 鼠标选中最下面的黄色图片,按住 Ctrl 键, 再用鼠标点击矩形的缩略图,选中选区,再按下 ctrlj ,复制选区。 同样操作弄好其他的矩形选区,再删除…

项目管理证书 PMP 的含金量高吗?

一、国内PMP的含金量 1. 行业认可度 高需求行业:IT、通信、建筑、制造、金融等行业对PMP认可度较高,尤其是跨国企业、大型国企(如华为、阿里、腾讯、中建等)常将PMP作为项目经理岗位的优先录用条件。 招聘门槛:部分企…

旅游CMS选型:WordPress、Joomla与Drupal对比

内容概要 在旅游行业数字化转型进程中,内容管理系统(CMS)的选择直接影响网站运营效率与用户体验。WordPress、Joomla和Drupal作为全球主流的开源CMS平台,其功能特性与行业适配性存在显著差异。本文将从旅游企业核心需求出发&…

LeetCode349两个数组的交集

思路: 这个题目是查找交集,考虑用哈希数组,c语言用数组建立哈希表来解题,题目限定了数组长度在1000以内,那么可以设定一个result数组用于存储交集 1.我们需要将nums1映射到哈希表中 2.遍历nums2查询哈希表中是否存在该…

安装教程:windows上安装oracle详细教程

文章目录 前言一、下载 Oracle 安装包二、安装步骤三、连接ORACLE可视化工具1.1 PL/SQL Developer1.2 navicat 结束语优质源码分享 windows上安装oracle详细教程,在Windows上安装Oracle数据库需遵循以下步骤:首先,从官网下载对应版本的Oracle…

4、网工软考—VLAN配置—hybird配置

1、实验环境搭建: 2、实验过程 SW1: 先创建vlan2和vlan3 [Huawei-Ethernet0/0/2]port link-type hybrid //hybird端口 [Huawei-Ethernet0/0/2]port hybrid pvid vlan 2 [Huawei-Ethernet0/0/2]port hybrid untagged vlan 10 //撕掉vlan10的标签 …

平台清洗行动:AI浏览器用户生存率高出传统方案17倍

平台清洗行动:AI 浏览器用户生存率高出传统方案 17 倍 在这个数字化时代,网络环境的复杂性不断增加,用户在浏览网页时面临着各种风险,包括恶意软件、钓鱼攻击和隐私泄露等。为了应对这些挑战,AI 浏览器应运而生&#…

【C++篇】C++入门基础(一)

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C感兴趣的…

MaskFormer语义分割算法测试

MaskFormer是一套基于transformer结构的语义分割代码。 链接地址: https://github.com/facebookresearch/MaskFormer/tree/main 测试用的数据集:ADE20k Dataset MIT Scene Parsing Benchmark 该数据集可通过上述链接下载,其中training含有…

javaWeb vue的简单语法

一、简介 两大核心优势: 声明式渲染:Vue 基于标准 HTML 拓展了一套模板语法,使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。 响应性:Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 D…

vue create创建 Vue-router 工程

vue create创建 Vue-router 工程 参考 创建vue项目的两种方式:vue-create与vite https://www.cnblogs.com/reverse-x/p/16806534.html Vue2 脚手架 创建工程 测试程序 https://blog.csdn.net/wowocpp/article/details/146590400 在 上面的基础上 cd .\vue2-demo\…

CXL UIO Direct P2P学习

前言: 在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。以下是UIO的核心概念及UI…

口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析

一、系统架构与编程框架设计 口腔种植全流程人工智能导航系统的开发是一项高度复杂的多学科融合工程,其核心架构需在医学精准性、工程实时性与临床实用性之间实现平衡。系统设计以模块化分层架构为基础,结合高实时性数据流与多模态协同控制理念,覆盖从数据采集、智能决策到…

李宏毅机器学习笔记(1)—机器学习基本概念+深度学习基本概念

机器学习基本概念 1、获取模型 步骤 1.1、假定未知函数 带未知参数的函数 1.2、定义损失函数 真实值:label MAE MSE 几率分布,cross-entropy? 1.3、优化 单独考虑一个参数 让损失函数最小,找导数为零的点 单独考虑w,w…

专注自习室:番茄工作法实践

专注自习室:番茄工作法实践 我需要一个任务管理工具,但在网上找了很多都找不到合适的工具。市面上的大多数产品过于强调任务完成性,给我带来了很强的心理压力,这种压力最终反而降低了我的工作效率。于是我决定自己动手&#xff0…

【银河麒麟高级服务器操作系统 】虚拟机运行数据库存储异常现象分析及处理全流程

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…

阿里云数据学习20250327

课堂链接:阿里云培训中心 (aliyun.com) 一、课堂问题 (一)课时3 1.支持字符集的含义是什么

使用QuickReporter将多张图片插入在word多行的表格中

之前有一位QuickReporter的用户提到过一个需求。他有大量的图片需要插入在word里面,他的想法是将图片放在一个文件夹内,按编号1,2,3,...编号,然后自动将这些图片从前到后插入到表格中。 这次偶然发现了该需求是可以实现的,且在当…

【大模型】激活函数之SwiGLU详解

文章目录 1. Swish基本定义主要特点代码实现 2. GLU (Gated Linear Unit)基本定义主要特点代码实现 3. SwiGLU基本定义主要特点代码实现 参考资料 SWiGLU是大模型常用的激活函数,是2020年谷歌提出的激活函数,它结合了Swish和GLU两者的特点。SwiGLU激活函…