色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)實戰(zhàn):【系統(tǒng)服務管理部件】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-21 17:56 ? 次閱讀

簡介

samgr組件是OpenHarmony的核心組件,提供OpenHarmony系統(tǒng)服務啟動、注冊、查詢等功能。

系統(tǒng)架構

圖 1 系統(tǒng)服務管理系統(tǒng)架構圖

說明

  1. samgr服務接收到sa框架層發(fā)送的注冊消息,會在本地緩存中存入系統(tǒng)服務相關信息

    int32_t SystemAbilityManager::AddSystemAbility(int32_t systemAbilityId, const sptr< IRemoteObject >& ability,
        const SAExtraProp& extraProp)
    {
        if (!CheckInputSysAbilityId(systemAbilityId) || ability == nullptr) {
            HILOGE("AddSystemAbilityExtra input params is invalid.");
            return ERR_INVALID_VALUE;
        }
        {
            unique_lock< shared_mutex > writeLock(abilityMapLock_);
            auto saSize = abilityMap_.size();
            if (saSize >= MAX_SERVICES) {
                HILOGE("map size error, (Has been greater than %zu)", saSize);
                return ERR_INVALID_VALUE;
            }
            SAInfo saInfo;
            saInfo.remoteObj = ability;
            saInfo.isDistributed = extraProp.isDistributed;
            saInfo.capability = extraProp.capability;
            saInfo.permission = Str16ToStr8(extraProp.permission);
            abilityMap_[systemAbilityId] = std::move(saInfo);
            HILOGI("insert %{public}d. size : %{public}zu", systemAbilityId, abilityMap_.size());
        }
        RemoveCheckLoadedMsg(systemAbilityId);
        if (abilityDeath_ != nullptr) {
            ability- >AddDeathRecipient(abilityDeath_);
        }
    
        u16string strName = Str8ToStr16(to_string(systemAbilityId));
        if (extraProp.isDistributed && dBinderService_ != nullptr) {
            dBinderService_- >RegisterRemoteProxy(strName, systemAbilityId);
            HILOGD("AddSystemAbility RegisterRemoteProxy, serviceId is %{public}d", systemAbilityId);
        }
        if (systemAbilityId == SOFTBUS_SERVER_SA_ID && !isDbinderStart_) {
            if (dBinderService_ != nullptr && rpcCallbackImp_ != nullptr) {
                bool ret = dBinderService_- >StartDBinderService(rpcCallbackImp_);
                HILOGI("start result is %{public}s", ret ? "succeed" : "fail");
                isDbinderStart_ = true;
            }
        }
        SendSystemAbilityAddedMsg(systemAbilityId, ability);
        return ERR_OK;
    }
    
  2. 對于本地服務而言,samgr服務接收到sa框架層發(fā)送的獲取消息,會通過服務id,查找到對應服務的代理對象,然后返回給sa框架。

    sptr< IRemoteObject > SystemAbilityManager::CheckSystemAbility(int32_t systemAbilityId)
    {
        if (!CheckInputSysAbilityId(systemAbilityId)) {
            HILOGW("CheckSystemAbility CheckSystemAbility invalid!");
            return nullptr;
        }
    
        shared_lock< shared_mutex > readLock(abilityMapLock_);
        auto iter = abilityMap_.find(systemAbilityId);
        if (iter != abilityMap_.end()) {
            HILOGI("found service : %{public}d.", systemAbilityId);
            return iter- >second.remoteObj;
        }
        HILOGI("NOT found service : %{public}d", systemAbilityId);
        return nullptr;
    }
    
  3. 動態(tài)加載系統(tǒng)服務進程及SystemAbility, 系統(tǒng)進程無需開機啟動,而是在SystemAbility被訪問的時候按需拉起,并加載指定SystemAbility。
    3.1 繼承SystemAbilityLoadCallbackStub類,并覆寫OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const sptr& remoteObject)、OnLoadSystemAbilityFail(int32_t systemAbilityId)方法。

    class OnDemandLoadCallback : public SystemAbilityLoadCallbackStub {
    public:
        void OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const sptr< IRemoteObject >& remoteObject) override;
        void OnLoadSystemAbilityFail(int32_t systemAbilityId) override;
    };
    
    void OnDemandLoadCallback::OnLoadSystemAbilitySuccess(int32_t systemAbilityId,
        const sptr< IRemoteObject >& remoteObject) // systemAbilityId為指定加載的SAID,remoteObject為指定systemAbility的代理對象
    {
        cout < < "OnLoadSystemAbilitySuccess systemAbilityId:" < < systemAbilityId < < " IRemoteObject result:" < <
            ((remoteObject != nullptr) ? "succeed" : "failed") < < endl;
    }
    
    void OnDemandLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) // systemAbilityId為指定加載的SAID
    {
        cout < < "OnLoadSystemAbilityFail systemAbilityId:" < < systemAbilityId < < endl;
    }
    

    3.2 調用samgr提供的動態(tài)加載接口LoadSystemAbility(int32_t systemAbilityId, const sptr& callback)。

    // 構造步驟1的SystemAbilityLoadCallbackStub子類的實例
    sptr< OnDemandLoadCallback > loadCallback_ = new OnDemandLoadCallback();
    // 調用LoadSystemAbility方法
    sptr< ISystemAbilityManager > sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
    if (sm == nullptr) {
        cout < < "GetSystemAbilityManager samgr object null!" < < endl;
        return;
    }
    int32_t result = sm- >LoadSystemAbility(systemAbilityId, loadCallback_);
    if (result != ERR_OK) {
        cout < < "systemAbilityId:" < < systemAbilityId < < " load failed, result code:" < < result < < endl;
        return;
    }
    

鴻蒙開發(fā)知識更新,前往[qr23.cn/AKFP8k]可參考

鴻蒙開發(fā)OpenHarmony就業(yè)必修技能.png

說明:
1.LoadSystemAbility方法調用成功后,指定SystemAbility加載成功后會觸發(fā)回調OnLoadSystemAbilitySuccess,加載失敗觸發(fā)回調OnLoadSystemAbilityFail。
2.動態(tài)加載的進程cfg文件不能配置為開機啟動,需指定"ondemand" : true, 示例如下:

{
  "services" : [{
          "name" : "listen_test",
          "path" : ["/system/bin/sa_main", "/system/profile/listen_test.json"],
          "ondemand" : true,
          "uid" : "system",
          "gid" : ["system", "shell"]
      }   
  ]
}

3.LoadSystemAbility方法適用于動態(tài)加載場景,其他獲取SystemAbility場景建議使用CheckSystemAbility方法。
4.cfg里進程名稱需要與SA的配置json文件里進程名保持一致

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2345

    瀏覽量

    42822
  • OpenHarmony
    +關注

    關注

    25

    文章

    3716

    瀏覽量

    16273
收藏 人收藏

    評論

    相關推薦

    鴻蒙實戰(zhàn)開發(fā):【FaultLoggerd組件】講解

    Faultloggerd部件是OpenHarmony中C/C++運行時崩潰臨時日志的生成及管理模塊。面向基于 Rust 開發(fā)部件,F(xiàn)aultloggerd 提供了Rust Panic
    的頭像 發(fā)表于 03-12 16:22 ?1029次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>開發(fā)</b>:【FaultLoggerd組件】講解

    鴻蒙原生應用/元服務實戰(zhàn)-AGC團隊賬戶

    多人及內(nèi)外結合去開發(fā)運營鴻蒙原生應用元服務時,需要用到團隊賬戶,AGC提供了強大的團隊角色與權限分工能力。 團隊帳號是開發(fā)者聯(lián)盟為實名開發(fā)
    發(fā)表于 01-18 16:38

    鴻蒙實戰(zhàn)項目開發(fā):【短信服務

    數(shù)據(jù)管理 電話服務 分布式應用開發(fā) 通知與窗口管理 多媒體技術 安全技能 任務管理 WebGL 國際化
    發(fā)表于 03-03 21:29

    鴻蒙Flutter實戰(zhàn):07混合開發(fā)

    # 鴻蒙Flutter實戰(zhàn):混合開發(fā) 鴻蒙Flutter混合開發(fā)主要有兩種形式。 ## 1.基于har 將flutter module
    發(fā)表于 10-23 16:00

    鴻蒙原生開發(fā)手記:01-元服務開發(fā)

    簡介 元服務鴻蒙中的一種輕量應用形態(tài),無需下載,直接運行。類似于微信小程序,但與小程序不同的是,元服務更加輕量。 元服務使用原生開發(fā),是
    發(fā)表于 11-14 17:28

    【專家問答】楊光明:鴻蒙系統(tǒng)研發(fā)工程師教你從0開發(fā)鴻蒙PCB開發(fā)

    `前言:本期我們邀請到了張飛實戰(zhàn)電子團隊的鴻蒙系統(tǒng)研發(fā)工程師楊光明老師@aMi楊光明,本期高手問答中老師將為我們解答大家在Linux系統(tǒng)開發(fā),單片機
    發(fā)表于 09-25 15:24

    《HarmonyOS原子化服務卡片原理與實戰(zhàn)》清華大學出版社李洋著

    對原子化服務未來發(fā)展的展望;繼續(xù)努力體驗與成長,持續(xù)奮斗。本書主要闡述鴻蒙操作系統(tǒng)( HarmonyOS )應用開發(fā)中全新的服務形式,原子化
    發(fā)表于 12-29 12:14

    鴻蒙原生應用/元服務開發(fā)-AGC分發(fā)如何下載管理Profile

    一、收到通知 尊敬的開發(fā)者: 您好,為支撐鴻蒙生態(tài)發(fā)展,HUAWEI AppGallery Connect已于X月XX日完成存量HarmonyOS應用/元服務的Profile文件更新,更新后
    發(fā)表于 11-29 15:10

    鴻蒙系統(tǒng)是基于什么開發(fā)

    爭議,那么鴻蒙系統(tǒng)到底是基于什么開發(fā)的呢?下面小編就為大家?guī)?b class='flag-5'>鴻蒙系統(tǒng)是基于什么開發(fā)的答案。
    的頭像 發(fā)表于 07-05 17:12 ?1.2w次閱讀

    華為開發(fā)者大會2021年亮點:鴻蒙系統(tǒng)的原子化服務開發(fā)

    華為開發(fā)者大會2021年:鴻蒙系統(tǒng)的原子化服務開發(fā) 在2021年華為開發(fā)者大會上,原子化
    的頭像 發(fā)表于 10-22 15:44 ?2670次閱讀
    華為<b class='flag-5'>開發(fā)</b>者大會2021年亮點:<b class='flag-5'>鴻蒙</b><b class='flag-5'>系統(tǒng)</b>的原子化<b class='flag-5'>服務</b><b class='flag-5'>開發(fā)</b>

    鴻蒙開發(fā)實戰(zhàn):【包管理系統(tǒng)

    管理系統(tǒng)負責應用安裝包的管理,提供安裝包的信息查詢、安裝、更新、卸載和包信息存儲等能力
    的頭像 發(fā)表于 03-14 15:23 ?678次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【包<b class='flag-5'>管理</b>子<b class='flag-5'>系統(tǒng)</b>】

    鴻蒙開發(fā)實戰(zhàn):【電話服務系統(tǒng)

    電話服務系統(tǒng),提供了一系列的API用于獲取無線蜂窩網(wǎng)絡和SIM卡相關的一些信息。應用可以通過調用API來獲取當前注冊網(wǎng)絡名稱、網(wǎng)絡服務狀態(tài)、信號強度以及SIM卡的相關信息。
    的頭像 發(fā)表于 03-14 21:49 ?381次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【電話<b class='flag-5'>服務</b>子<b class='flag-5'>系統(tǒng)</b>】

    鴻蒙實戰(zhàn)開發(fā)學習【FaultLoggerd組件】

    Faultloggerd部件是OpenHarmony中C/C++運行時崩潰臨時日志的生成及管理模塊。面向基于 Rust 開發(fā)部件,F(xiàn)aultloggerd 提供了Rust Panic
    的頭像 發(fā)表于 03-17 20:39 ?505次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>開發(fā)</b>學習【FaultLoggerd組件】

    鴻蒙開發(fā)實戰(zhàn):【系統(tǒng)服務管理部件

    samgr組件是OpenHarmony的核心組件,提供OpenHarmony系統(tǒng)服務啟動、注冊、查詢等功能。
    的頭像 發(fā)表于 03-19 15:52 ?359次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務</b><b class='flag-5'>管理</b><b class='flag-5'>部件</b>】

    鴻蒙開發(fā)實戰(zhàn):【系統(tǒng)服務框架部件

    系統(tǒng)服務管理系統(tǒng)中safwk組件定義OpenHarmony中SystemAbility的實現(xiàn)方法,并提供啟動、注冊等接口實現(xiàn)。
    的頭像 發(fā)表于 03-21 15:44 ?292次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務</b>框架<b class='flag-5'>部件</b>】
    主站蜘蛛池模板: 日韩精品亚洲专区在线电影不卡| 在线免费观看国产视频| 爱穿丝袜的麻麻3d漫画acg| 黑吊大战白女出浆| 肉动漫无修3D在线观看| 4484在线观看视频| 精品国产三级a| 我要干av| 成电影人免费网站| 美女与男人对肌免费网站| 亚洲免费无码av线观看| 国产精品xxxav免费视频| 欧美久久综合性欧美| 最近中文字幕在线中文高清版| 激情内射亚州一区二区三区爱妻| 欧美丝袜女同| 四虎影院2022| 依恋影院在线观看| 男人被绑着强行摸j| 亚洲AV香蕉一区区二区三区蜜桃 | 国产精品嫩草影院| 欧美疯狂做受xxxxx喷水| 最近2018年手机中文字幕| 精品国产乱码久久久久久夜深人妻 | 亚洲AV无码一区二区色情蜜芽 | 免费撕开胸罩吮胸视频| 伊人大香线蕉精品在线播放| 国产无遮挡又黄又爽在线视频| 日韩精品亚洲专区在线影院| silk118中文字幕无删减| 老司机亚洲精品影院| 用快播看av的网站| 亚洲欧洲无码AV在线观看你懂的| 高清午夜福利电影在线| 日本午夜精品久久久无码| gay吊粗大双龙| 欧美精品九九99久久在观看| 99久久久无码国产精精品| 免费精品国产人妻国语| 91免费永久在线地址| 美女全光末满18勿进|