自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Openharmony IPC通信(L2)

原創(chuàng)
系統(tǒng) OpenHarmony
Openharmony的IPC通信,幾乎所有模塊都有用到。對(duì)IPC通信流程的理解,為熟悉了解其他模塊有很重要的幫助。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://harmonyos.51cto.com??

一、簡介

Openharmony的IPC通信,幾乎所有模塊都有用到。

對(duì)IPC通信流程的理解,為熟悉了解其他模塊有很重要的幫助。

IPC通信(倉庫:communication_ipc)與safwk系統(tǒng)服務(wù)框架(倉庫:distributedschedule_safwk)和samgr系統(tǒng)服務(wù)管理(倉庫:distributedschedule_samgr)有很緊密的聯(lián)系。

二、IPC通信

2.1 IPC通信注冊流程

以foundation\communication\ipc\ipc\test\auxiliary\native為例,對(duì)IPC進(jìn)行梳理。

IPC通信包括客戶端(client)和服務(wù)端(service)。

  • 服務(wù)端TestService繼承自IPCObjectStub。
  • 客戶端TestServiceClient通過iface_cast(object)獲取到一個(gè)TestServiceProxy對(duì)象。TestServiceProxy繼承自PeerHolder,里面包含指向IPCObjectProxy的指針。
  • 客戶端的IPCObjectProxy和服務(wù)端IPCObjectStub是對(duì)應(yīng)關(guān)系。

流程圖:

流程圖解釋

服務(wù)端以IPC_TEST_SERVICE為saId,將繼承自IPCObjectStub的對(duì)象經(jīng)dbinder驅(qū)動(dòng),注冊到samgr系統(tǒng)服務(wù)管理進(jìn)程中去。

binder_translate_binder有一個(gè)將標(biāo)志為BINDER_TYPE_BINDER轉(zhuǎn)換成BINDER_TYPE_HANDLE的過程。samgr響應(yīng)注冊消息,通過BinderInvoker::UnflattenObject解析對(duì)象,實(shí)際上是根據(jù)注冊的IPCObjectStubnew一個(gè)IPCObjectProxy對(duì)象存儲(chǔ)在samgr的map中。

客戶端以IPC_TEST_SERVICE去samgr中取IPCObjectProxy對(duì)象。并通過iface_castnew一個(gè)包含取的IPCObjectProxy的TestServiceProxy對(duì)象。這樣客戶端和服務(wù)端就建立起了關(guān)系,可以進(jìn)行下一步相互通信。

2.2 IPC通信交互

Openharmony的IPC通信,有點(diǎn)類似http協(xié)議:客戶發(fā)送數(shù)據(jù)==>服務(wù)端響應(yīng)處理數(shù)據(jù)==>服務(wù)端回復(fù)==>客戶端獲取到回復(fù)數(shù)據(jù)

流程圖如下:

客戶端與服務(wù)端的交互

客戶端通過: Remote()->SendRequest向服務(wù)端發(fā)消息,等待結(jié)果。

服務(wù)端通過: xxxServiceStub::OnRemoteRequest處理客戶端消息,并回復(fù)。

三、samgr系統(tǒng)服務(wù)管理進(jìn)程

主要管理各個(gè)模塊服務(wù)端注冊的saId和IPCObjectProxy對(duì)象鍵值對(duì)。

四、safwk系統(tǒng)服務(wù)框架

IPC客戶端服務(wù)端注冊拉起框架。

4.1 服務(wù)端的注冊

xxxInterface是客戶端和服務(wù)端都需要實(shí)現(xiàn)的接口繼承類。

注冊方式1,基本上自己有main函數(shù)入口:

xxxService繼承IPCObjectStub 和 xxxInterface

auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
sptr<IRemoteObject> newInstance = new xxxService();
int result = saMgr->AddSystemAbility(xxxSaId, newInstance);

注冊方式2, 本身沒有main函數(shù)入口,需要借助safwk的main入口:

xxxService繼承IPCObjectStub,xxxInterface 和 SystemAbility

// 注冊方式2的第一種方式
REGISTER_SYSTEM_ABILITY_BY_ID(xxxService, xxxSaId, true);
// 注冊方式2的第二種方式
SystemAbility::MakeAndRegisterAbility

4.2 服務(wù)拉起

  • 注冊方式1:有main入口,是一個(gè)獨(dú)立進(jìn)程。直接運(yùn)行即可。
  • 注冊方式2:編譯出來是一個(gè)動(dòng)態(tài)庫,

通過: /system/bin/sa_main /system/profile/xxx_sa.xml拉起來,xml文件中配置了動(dòng)態(tài)庫信息??梢詤⒖嘉臋n

??【OpenHarmony SA 動(dòng)態(tài)庫服務(wù) 拉起的main入口】??了解拉起流程

4.3 客戶端類定義

xxxServiceProxy繼承PeerHolder 和 xxxInterface

客戶端類中定義一個(gè)靜態(tài)變量:

// 定義靜態(tài)變量,才能通過iface_cast創(chuàng)建一個(gè)包含IPCObjectProxy的xxxServiceProxy對(duì)象
static inline BrokerDelegator<xxxServiceProxy> delegator_;

4.4 客戶端獲取注冊信息

auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
sptr<IRemoteObject> object = saMgr->GetSystemAbility(SaId);
client = iface_cast<xxxInterface >(object);

以foundation\communication\ipc\ipc\test\auxiliary\native為例繼承圖:

??想了解更多內(nèi)容,請(qǐng)?jiān)L問:??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://harmonyos.51cto.com??

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-07-04 16:41:16

IPC通信HiTrace

2022-07-14 19:03:33

IPC服務(wù)鴻蒙

2022-06-22 09:14:23

事件打點(diǎn)HiSysEvent

2022-02-21 15:38:57

Openharmon操作系統(tǒng)鴻蒙

2022-06-14 15:07:04

IPC客戶端服務(wù)端

2022-04-06 11:27:05

harmonyeTS 開發(fā)NAPI開發(fā)

2021-10-20 19:14:30

緩存CacheCPU

2015-01-20 13:19:52

OpenStack網(wǎng)絡(luò)層數(shù)據(jù)鏈路層

2022-01-06 16:16:21

鴻蒙HarmonyOS應(yīng)用

2023-01-31 09:12:16

CPU芯片緩存

2023-02-20 08:00:00

2023-10-10 15:33:55

機(jī)器學(xué)習(xí)相似性度量

2022-08-26 14:58:43

區(qū)塊鏈比特幣架構(gòu)

2022-01-14 09:57:14

鴻蒙HarmonyOS應(yīng)用

2019-07-30 13:18:25

自動(dòng)駕駛L2駕駛

2014-11-25 13:28:17

openstackneutronDVR

2022-02-14 13:52:04

OpenHarmor系統(tǒng)鴻蒙

2022-03-21 15:42:36

智能家居物聯(lián)網(wǎng)MQTT

2022-02-25 15:33:45

圖像采集鴻蒙Camera相機(jī)

2021-06-30 12:48:50

自動(dòng)駕駛人工智能AI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)