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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-19 15:52 ? 次閱讀

簡(jiǎn)介

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

系統(tǒng)架構(gòu)

圖 1 系統(tǒng)服務(wù)管理系統(tǒng)架構(gòu)圖

目錄

/foundation/systemabilitymgr
├── samgr
│   ├── bundle.json  # 部件描述及編譯文件
│   ├── frameworks   # 框架實(shí)現(xiàn)存在目錄
│   ├── interfaces   # 接口目錄
│   ├── services     # 組件服務(wù)端目錄
│   ├── test         # 測(cè)試代碼存放目錄
│   ├── utils        # 工具類目錄

說(shuō)明

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

    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. 對(duì)于本地服務(wù)而言,samgr服務(wù)接收到sa框架層發(fā)送的獲取消息,會(huì)通過(guò)服務(wù)id,查找到對(duì)應(yīng)服務(wù)的代理對(duì)象,然后返回給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. 動(dòng)態(tài)加載系統(tǒng)服務(wù)進(jìn)程及SystemAbility, 系統(tǒng)進(jìn)程無(wú)需開(kāi)機(jī)啟動(dòng),而是在SystemAbility被訪問(wèn)的時(shí)候按需拉起,并加載指定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的代理對(duì)象
    {
        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 調(diào)用samgr提供的動(dòng)態(tài)加載接口LoadSystemAbility(int32_t systemAbilityId, const sptr& callback)。

    // 構(gòu)造步驟1的SystemAbilityLoadCallbackStub子類的實(shí)例
    sptr< OnDemandLoadCallback > loadCallback_ = new OnDemandLoadCallback();
    // 調(diào)用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;
    }
    

說(shuō)明:
1.LoadSystemAbility方法調(diào)用成功后,指定SystemAbility加載成功后會(huì)觸發(fā)回調(diào)OnLoadSystemAbilitySuccess,加載失敗觸發(fā)回調(diào)OnLoadSystemAbilityFail。
2.動(dòng)態(tài)加載的進(jìn)程cfg文件不能配置為開(kāi)機(jī)啟動(dòng),需指定"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方法適用于動(dòng)態(tài)加載場(chǎng)景,其他獲取SystemAbility場(chǎng)景建議使用CheckSystemAbility方法。
4.cfg里進(jìn)程名稱需要與SA的配置json文件里進(jìn)程名保持一致

審核編輯 黃宇

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

    關(guān)注

    57

    文章

    2345

    瀏覽量

    42822
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3716

    瀏覽量

    16274
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    鴻蒙原生應(yīng)用/元服務(wù)實(shí)戰(zhàn)-AGC團(tuán)隊(duì)賬戶

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

    鴻蒙實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā):【短信服務(wù)

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

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

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

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

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

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

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

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

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

    鴻蒙原生應(yīng)用/元服務(wù)開(kāi)發(fā)-AGC分發(fā)如何下載管理Profile

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

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

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

    華為開(kāi)發(fā)者大會(huì)2021年亮點(diǎn):鴻蒙系統(tǒng)的原子化服務(wù)開(kāi)發(fā)

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

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

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

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

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

    鴻蒙實(shí)戰(zhàn)開(kāi)發(fā)學(xué)習(xí)【FaultLoggerd組件】

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

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

    系統(tǒng)服務(wù)管理系統(tǒng)中safwk組件定義OpenHarmony中SystemAbility的實(shí)現(xiàn)方法,并提供啟動(dòng)、注冊(cè)等接口實(shí)現(xiàn)。
    的頭像 發(fā)表于 03-21 15:44 ?293次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務(wù)</b>框架<b class='flag-5'>部件</b>】

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

    samgr組件是OpenHarmony的核心組件,提供OpenHarmony系統(tǒng)服務(wù)啟動(dòng)、注冊(cè)、查詢等功能。
    的頭像 發(fā)表于 03-21 17:56 ?349次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>服務(wù)</b><b class='flag-5'>管理</b><b class='flag-5'>部件</b>】
    主站蜘蛛池模板: 中国午夜伦理片| 红桃视频国产AV| 久久精品国产亚洲AV影院| 日本人bbwbbwbbwbbw| 18禁黄久久久AAA片| 国产综合在线视频| 色多多深夜福利免费观看| 99re久久热在线播放快| 久久99r66热这里有精品| 午夜性爽视频男人的天堂在线 | 国产午夜精品不卡观看| 日本久久中文字幕| 别停好爽好深好大好舒服视频| 玖玖热视频一区二区人妻| 亚洲精品国产一区二区贰佰信息网| 纯肉高H种马艳遇风流多| 女同给老师下媚药| 中文字幕在线久热精品| 黄色网址在线看| 亚洲AV蜜桃永久无码精品红樱桃| 国产AV亚洲一区精午夜麻豆 | 亚洲中文无码永久免费| 国产乱码一区二区三区| 日韩亚洲欧美中文在线| WWW久久只有这里有精品| 男人私gay挠脚心vk视频| 最新国产av.在线视频| 年轻的搜子8中字在线观看 | 日韩欧美视频一区二区在线观看 | av网站视频在线观看| 美女议员被泄裸照| 中文字幕乱码亚洲无线三区| 免费乱理伦片在线观看八戒| 2021精品高清卡1卡2卡3麻豆| 久久精品黄色| 97资源站超碰在线视频| 日本精品久久久久中文字幕 1| 国产精品97久久AV色婷婷综合| 色欲人妻AAAAAAA无码| 国产成人精品视频播放| 视频一区国产在线二区|