国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS 遠(yuǎn)端狀態(tài)訂閱開發(fā)實例

這篇具有很好參考價值的文章主要介紹了HarmonyOS 遠(yuǎn)端狀態(tài)訂閱開發(fā)實例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

IPC/RPC 提供對遠(yuǎn)端 Stub 對象狀態(tài)的訂閱機制,?在遠(yuǎn)端 Stub 對象消亡時,可觸發(fā)消亡通知告訴本地 Proxy 對象。這種狀態(tài)通知訂閱需要調(diào)用特定接口完成,當(dāng)不再需要訂閱時也需要調(diào)用特定接口取消。使用這種訂閱機制的用戶,需要實現(xiàn)消亡通知接口 DeathRecipient 并實現(xiàn) onRemoteDied 方法清理資源。該方法會在遠(yuǎn)端 Stub 對象所在進(jìn)程消亡或所在設(shè)備離開組網(wǎng)時被回調(diào)。值得注意的是,調(diào)用這些接口有一定的順序。首先,需要 Proxy 訂閱 Stub 消亡通知,若在訂閱期間 Stub 狀態(tài)正常,則在不再需要時取消訂閱;若在訂閱期間 Stub 所在進(jìn)程退出或者所在設(shè)備退出組網(wǎng),則會自動觸發(fā) Proxy 自定義的后續(xù)操作。

使用場景

這種訂閱機制適用于本地 Proxy 對象需要感知遠(yuǎn)端 Stub 對象所在進(jìn)程消亡,或所在設(shè)備離開組網(wǎng)的場景。當(dāng) Proxy 感知到 Stub 端消亡后,可適當(dāng)清理本地資源。此外,RPC 目前不提供匿名 Stub 對象的消亡通知,即只有向 SAMgr 注冊過的服務(wù)才能被訂閱消亡通知,IPC 則支持匿名對象的消亡通知。

Native 側(cè)接口

HarmonyOS 遠(yuǎn)端狀態(tài)訂閱開發(fā)實例,華為,HarmonyOS

參考代碼 ?

#include "iremote_broker.h"
#include "iremote_stub.h"


//定義消息碼
enum {
    TRANS_ID_PING_ABILITY = 5,
    TRANS_ID_REVERSED_MONITOR
};

const std::string DESCRIPTOR = "test.ITestAbility";

class ITestService : public IRemoteBroker {
public:
    // DECLARE_INTERFACE_DESCRIPTOR是必需的,入?yún)⑿枋褂胹td::u16string;
    DECLARE_INTERFACE_DESCRIPTOR(to_utf16(DESCRIPTOR));
    virtual int TestPingAbility(const std::u16string &dummy) = 0; // 定義業(yè)務(wù)函數(shù)
};

class TestServiceProxy : public IRemoteProxy<ITestAbility> {
public:
    explicit TestAbilityProxy(const sptr<IRemoteObject> &impl);
    virtual int TestPingAbility(const std::u16string &dummy) override;
    int TestAnonymousStub();
private:
    static inline BrokerDelegator<TestAbilityProxy> delegator_; // 方便后續(xù)使用iface_cast宏
};

TestServiceProxy::TestServiceProxy(const sptr<IRemoteObject> &impl)
    : IRemoteProxy<ITestAbility>(impl)
{
}

int TestServiceProxy::TestPingAbility(const std::u16string &dummy){
    MessageOption option;
    MessageParcel dataParcel, replyParcel;
    dataParcel.WriteString16(dummy);
    int error = PeerHolder::Remote()->SendRequest(TRANS_ID_PING_ABILITY, dataParcel, replyParcel, option);
    int result = (error == ERR_NONE) ? replyParcel.ReadInt32() : -1;
    return result;
}
#include "iremote_object.h"

class TestDeathRecipient : public IRemoteObject::DeathRecipient {
public:
    virtual void OnRemoteDied(const wptr<IRemoteObject>& remoteObject);
}

void TestDeathRecipient::OnRemoteDied(const wptr<IRemoteObject>& remoteObject)
{
}
sptr<IPCObjectProxy> object = new IPCObjectProxy(1, to_utf16(DESCRIPTOR));
sptr<IRemoteObject::DeathRecipient> deathRecipient (new TestDeathRecipient());// 構(gòu)造一個消亡通知對象
bool result = object->AddDeathRecipient(deathRecipient); // 注冊消亡通知
result = object->RemoveDeathRecipient(deathRecipient); // 移除消亡通知

JS 側(cè)接口

HarmonyOS 遠(yuǎn)端狀態(tài)訂閱開發(fā)實例,華為,HarmonyOS

參考代碼

import FA from "@ohos.ability.featureAbility";let proxy;let connect = {    onConnect: function(elementName, remoteProxy) {        console.log("RpcClient: js onConnect called.");        proxy = remoteProxy;    },    onDisconnect: function(elementName) {        console.log("RpcClient: onDisconnect");    },    onFailed: function() {        console.log("RpcClient: onFailed");    }};let want = {    "bundleName": "com.ohos.server",    "abilityName": "com.ohos.server.MainAbility",};FA.connectAbility(want, connect);class MyDeathRecipient {    onRemoteDied() {        console.log("server died");    }}let deathRecipient = new MyDeathRecipient();proxy.addDeathRecipient(deathRecipient, 0);proxy.removeDeathRecipient(deathRecipient, 0);

Stub 感知 Proxy 消亡(匿名 Stub 的使用)

正向的消亡通知是 Proxy 感知 Stub 的狀態(tài),若想達(dá)到反向的死消亡通知,即 Stub 感知 Proxy 的狀態(tài),可以巧妙的利用正向消亡通知。如兩個進(jìn)程 A(原 Stub 所在進(jìn)程)和 B(原 Proxy 所在進(jìn)程),進(jìn)程 B 在獲取到進(jìn)程 A 的 Proxy 對象后,在 B 進(jìn)程新建一個匿名 Stub 對象(匿名指未向 SAMgr 注冊),可稱之為回調(diào) Stub,再通過 SendRequest 接口將回調(diào) Stub 傳給進(jìn)程 A 的原 Stub。這樣一來,進(jìn)程 A 便獲取到了進(jìn)程 B 的回調(diào) Proxy。當(dāng)進(jìn)程 B 消亡或 B 所在設(shè)備離開組網(wǎng)時,回調(diào) Stub 會消亡,回調(diào) Proxy 會感知,進(jìn)而通知給原 Stub,便實現(xiàn)了反向消亡通知。

注意:

反向死亡通知僅限設(shè)備內(nèi)跨進(jìn)程通信使用,不可用于跨設(shè)備。

當(dāng)匿名 Stub 對象沒有被任何一個 Proxy 指向的時候,內(nèi)核會自動回收。文章來源地址http://www.zghlxwxcb.cn/news/detail-724757.html

參考代碼

//Proxyint TestAbilityProxy::TestAnonymousStub(){    MessageOption option;    MessageParcel dataParcel, replyParcel;    dataParcel.UpdateDataVersion(Remote());    dataParcel.WriteRemoteObject(new TestAbilityStub());    int error = Remote()->SendRequest(TRANS_ID_REVERSED_MONITOR,dataParcel, replyParcel, option);    int result = (error == ERR_NONE) ? replyParcel.ReadInt32() : -1;    return result;}
//Stub
int TestAbilityStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option){    switch (code) {        case TRANS_ID_REVERSED_MONITOR: {            sptr<IRemoteObject> obj = data.ReadRemoteObject();            if (obj == nullptr) {                reply.WriteInt32(ERR_NULL_OBJECT);                return ERR_NULL_OBJECT;            }            bool result = obj->AddDeathRecipient(new TestDeathRecipient());            result ? reply.WriteInt32(ERR_NONE) : reply.WriteInt32(-1);            break;        }        default:            break;    }    return ERR_NONE;}

到了這里,關(guān)于HarmonyOS 遠(yuǎn)端狀態(tài)訂閱開發(fā)實例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • HarmonyOS鴻蒙開發(fā)指南:基于ArkTS的聲明式開發(fā)范式 聲明式UI開發(fā)實例 繪圖與動畫

    目錄 繪制圖形 繪制基本幾何圖形 繪制自定義幾何圖形 animateTo實現(xiàn)閃屏動畫 頁面轉(zhuǎn)場動畫 繪制能力主要是通過框架提供的繪制組件來支撐,支持svg標(biāo)準(zhǔn)繪制命令。 本節(jié)主要學(xué)習(xí)如何使用繪制組件,繪制詳情頁食物成分標(biāo)簽(基本幾何圖形)和應(yīng)用Logo(自定義圖形)。

    2024年01月17日
    瀏覽(26)
  • HarmonyOS鴻蒙開發(fā)指南:UI開發(fā) 基于ArkTS的聲明式開發(fā)范式 聲明式UI開發(fā)實例 頁面布局與連接

    目錄 構(gòu)建食物數(shù)據(jù)模型 構(gòu)建食物列表List布局 構(gòu)建食物分類Grid布局 ?頁面跳轉(zhuǎn)與數(shù)據(jù)傳遞

    2024年02月03日
    瀏覽(29)
  • 更強版本來襲,華為云耀云服務(wù)器L實例讓小程序開發(fā)更高效更安全

    更強版本來襲,華為云耀云服務(wù)器L實例讓小程序開發(fā)更高效更安全

    當(dāng)今世界,百年未有之大變局加速演進(jìn),互聯(lián)網(wǎng)日益成為推動發(fā)展的新動能、維護(hù)安全的新疆域、文明互鑒的新平臺。2023年世界互聯(lián)網(wǎng)大會烏鎮(zhèn)峰會期間發(fā)布的《中國互聯(lián)網(wǎng)發(fā)展報告2023》藍(lán)皮書顯示,當(dāng)前,我國數(shù)字經(jīng)濟發(fā)展勢頭強勁,成為穩(wěn)增長促轉(zhuǎn)型的重要引擎。 數(shù)字

    2024年02月05日
    瀏覽(22)
  • 智能合約入門開發(fā)實例

    web3開發(fā):前端使用ethers.js調(diào)用Hello智能合約。 hello.sol 智能合約文件: dapp.html? 前端文件:

    2024年02月02日
    瀏覽(26)
  • 安卓開發(fā)實例:方向傳感器

    安卓開發(fā)實例:方向傳感器

    調(diào)用手機的方向傳感器,X軸,Y軸,Z軸的數(shù)值 activity_sensor.xml Sensor.java

    2024年02月06日
    瀏覽(26)
  • 鴻蒙開發(fā)實例 | 分布式涂鴉

    鴻蒙開發(fā)實例 | 分布式涂鴉

    CSDN話題挑戰(zhàn)賽第2期 參賽話題:學(xué)習(xí)筆記 ?本篇文章介紹分布式設(shè)備間如何共享涂鴉畫板的核心功能。 在涂鴉畫板中有3個核心功能: ??? (1) 涂鴉者選擇好希望連接的設(shè)備后,可以直接把涂鴉成果流轉(zhuǎn)給對應(yīng)的設(shè)備。 ??? (2) 其他設(shè)備接收流轉(zhuǎn)的涂鴉后,可以在涂鴉的基礎(chǔ)上添

    2024年02月09日
    瀏覽(29)
  • OpenHarmony開發(fā)實例:【 待辦事項TodoList】

    OpenHarmony開發(fā)實例:【 待辦事項TodoList】

    簡介 TodoList應(yīng)用是基于OpenHarmony SDK開發(fā)的安裝在潤和HiSpark Taurus AI Camera(Hi3516d)開發(fā)板標(biāo)準(zhǔn)系統(tǒng)上的應(yīng)用;應(yīng)用主要功能是以列表的形式,展示需要完成的日程;通過本demo可以學(xué)習(xí)到 JS UI 框架List使用; 運行效果 樣例原理 本demo只有一個list組件組成,初始化數(shù)據(jù)展示列表,并

    2024年04月28日
    瀏覽(32)
  • OpenHarmony開發(fā)實例:【新聞客戶端】

    OpenHarmony開發(fā)實例:【新聞客戶端】

    本篇Codelab我們將教會大家如何構(gòu)建一個簡易的OpenHarmony新聞客戶端(JS版本)。應(yīng)用包含兩級頁面,分別是主頁面和詳情頁面,兩個頁面都展示了豐富的UI組件,其中詳情頁的實現(xiàn)邏輯中還展示了如何通過調(diào)用相應(yīng)接口,實現(xiàn)跨設(shè)備拉起FA。本教程將結(jié)合以下內(nèi)容進(jìn)行講解:

    2024年04月28日
    瀏覽(19)
  • Arduino開發(fā)實例-Arduino中斷詳解

    本文是關(guān)于Arduino中斷的文章。中斷是一種讓Arduino在特定事件發(fā)生時執(zhí)行特定代碼的功能。中斷可以讓Arduino在后臺執(zhí)行一些重要的任務(wù),也可以讓Arduino在低功耗模式下被喚醒。中斷的使用需要注意一些細(xì)節(jié)和注意事項,本文將介紹中斷的基本概念、使用方法和示例。 中斷是

    2024年02月11日
    瀏覽(22)
  • 關(guān)于微信小程序云開發(fā)以及云開發(fā)實例展示

    關(guān)于微信小程序云開發(fā)以及云開發(fā)實例展示

    本文分享給使用 微信云開發(fā) 的同學(xué) 首先, 云開發(fā) 是一種趨勢,因為跨平臺解決方案可以提高開發(fā)效率,減少開發(fā)成本。使用云開發(fā),開發(fā)者無需關(guān)注服務(wù)器、網(wǎng)絡(luò)和數(shù)據(jù)庫等底層技術(shù),可以專注于業(yè)務(wù)邏輯的開發(fā),從而減少了開發(fā)和運維方面的投入。 云開發(fā)的最大優(yōu)點之

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包