在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-21 15:44 ? 次閱讀

簡介

在系統(tǒng)服務(wù)管理子系統(tǒng)中safwk組件定義OpenHarmony中SystemAbility的實(shí)現(xiàn)方法,并提供啟動(dòng)、注冊等接口實(shí)現(xiàn)。

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

圖 1 系統(tǒng)服務(wù)框架圖

說明

接口說明

image.png

使用說明

SystemAbility實(shí)現(xiàn)一般采用XXX.cfg + profile.json + libXXX.z.so的方式由init進(jìn)程執(zhí)行對應(yīng)的XXX.cfg文件拉起相關(guān)SystemAbility進(jìn)程。

C++實(shí)現(xiàn)SystemAbility

示例代碼如下:

  • 1. 定義IPC對外接口IXXX

定義該服務(wù)對外提供的能力集合函數(shù),統(tǒng)一繼承IPC接口類IRemoteBroker;同時(shí)實(shí)現(xiàn)該IPC對外接口唯一標(biāo)識符DECLARE_INTERFACE_DESCRIPTOR(XXX);該標(biāo)識符用于IPC通信的校驗(yàn)等目的。

namespace OHOS {
class IListenAbility : public IRemoteBroker {
public:
    virtual int AddVolume(int volume) = 0;

public:
    enum {
        ADD_VOLUME = 1,
    };
public:
    DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.test.IListenAbility");
};
}
  • 2. 定義客戶端通信代碼XXXProxy
namespace OHOS {
class ListenAbilityProxy : public IRemoteProxy< IListenAbility > {
public:
    int AddVolume(int volume);

    explicit ListenAbilityProxy(const sptr< IRemoteObject >& impl)
        : IRemoteProxy< IListenAbility >(impl)
    {
    }

private:
    static inline BrokerDelegator< ListenAbilityProxy > delegator_;
};
} // namespace OHOS
  • 3. 定義服務(wù)端通信代碼XXXStub
namespace OHOS {
int32_t ListenAbilityStub::OnRemoteRequest(uint32_t code,
    MessageParcel& data, MessageParcel &reply, MessageOption &option)
{
    switch (code) {
        case ADD_VOLUME: {
            return reply.WriteInt32(AddVolume(data.ReadInt32()));
        }

        default:
            return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
    }
}
}
  • 4. SystemAbility的實(shí)現(xiàn)類
namespace {
constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, 0xD001800, "SA_TST"};
}

REGISTER_SYSTEM_ABILITY_BY_ID(ListenAbility, DISTRIBUTED_SCHED_TEST_LISTEN_ID, true);

ListenAbility::ListenAbility(int32_t saId, bool runOnCreate) : SystemAbility(saId, runOnCreate)
{
    HiLog::Info(LABEL, ":%s called", __func__);
    HiLog::Info(LABEL, "ListenAbility()");
}

ListenAbility::~ListenAbility()
{
    HiLog::Info(LABEL, "~ListenAbility()");
}

int ListenAbility::AddVolume(int volume)
{
    pid_t current = getpid();
    HiLog::Info(LABEL, "ListenAbility::AddVolume volume = %d, pid = %d.", volume, current);
    return (volume + 1);
}

void ListenAbility::OnDump()
{
}

void ListenAbility::OnStart()
{
    HiLog::Info(LABEL, "ListenAbility::OnStart()");
    HiLog::Info(LABEL, "ListenAbility:%s called:-----Publish------", __func__);
    bool res = Publish(this);
    if (res) {
        HiLog::Error(LABEL, "ListenAbility: res == false");
    }
    HiLog::Info(LABEL, "ListenAbility:%s called:AddAbilityListener_OS_TST----beg-----", __func__);
    AddSystemAbilityListener(DISTRIBUTED_SCHED_TEST_OS_ID);
    HiLog::Info(LABEL, "ListenAbility:%s called:AddAbilityListener_OS_TST----end-----", __func__);

    HiLog::Info(LABEL, "ListenAbility:%s called:StopAbility_OS_TST----beg-----", __func__);
    StopAbility(DISTRIBUTED_SCHED_TEST_OS_ID);
    HiLog::Info(LABEL, "ListenAbility:%s called:StopAbility_OS_TST----end-----", __func__);
    return;
}

void ListenAbility::OnStop()
{
}
  • 5. SystemAbility配置

以c++實(shí)現(xiàn)的SA必須配置相關(guān)System Ability的profile配置文件才會(huì)完成SA的加載注冊邏輯,否則沒有編寫profile配置的System Ability不會(huì)完成注冊。配置方法如下:

在子系統(tǒng)的根目錄新建一個(gè)以sa_profile為名的文件夾,然后在此文件夾中新建兩個(gè)文件:一個(gè)以serviceId為前綴的json文件,另外一個(gè)為BUILD.gn文件。

serviceid.json:

{
    "process": "listen_test",
    "systemability": [
        {
            "name": serviceid,
            "libpath": "liblisten_test.z.so",
            "run-on-create": true,
            "distributed": true,
            "dump_level": 1
        }
    ]
}

BUILD.gn:

import("http://build/ohos/sa_profile/sa_profile.gni")
ohos_sa_profile("xxx_sa_profile") {
    sources = [
        "serviceid.json"
    ]
    subsystem_name = "systemabilitymgr"
}

說明:

  1. 進(jìn)程名字即該SystemAbility要運(yùn)行的進(jìn)程空間,此字段是必填選項(xiàng)。
  2. 一個(gè)SystemAbility配置文件只能配置一個(gè)SystemAbility節(jié)點(diǎn),配置多個(gè)會(huì)導(dǎo)致編譯失敗。
  3. SystemAbility的name為對應(yīng)的serviceId必須與代碼中注冊的serviceId保持一致,必配項(xiàng)。
  4. libpath為SystemAbility的加載路徑,必配項(xiàng)。
  5. run-on-create:true表示進(jìn)程啟動(dòng)后即向samgr組件注冊該SystemAbility;false表示按需啟動(dòng),即在其他模塊訪問到該SystemAbility時(shí)啟動(dòng),必配項(xiàng)。
  6. distributed:true表示該SystemAbility為分布式SystemAbility,支持跨設(shè)備訪問;false表示只有本地跨IPC訪問。
  7. bootphase:可不設(shè)置;可以設(shè)置的值有三種:BootStartPhase、CoreStartPhase、OtherStartPhase(默認(rèn)類型),三種優(yōu)先級依次降低,當(dāng)同一個(gè)進(jìn)程中,會(huì)優(yōu)先拉起注冊配置BootStartPhase的SystemAbility,然后是配置了CoreStartPhase的SystemAbility,最后是OtherStartPhase;當(dāng)高優(yōu)先級的SystemAbility全部啟動(dòng)注冊完畢才會(huì)啟動(dòng)下一級的SystemAbility的注冊啟動(dòng)。
  8. dump-level:表示systemdumper支持的level等級,默認(rèn)配置1。
  9. BUILD.gn中subsystem_name為相應(yīng)部件名稱;sources表示當(dāng)前子系統(tǒng)需要配置的SystemAbility列表,可支持配置多個(gè)SystemAbility。

以上步驟完成后,全量編譯代碼后會(huì)在out路徑向生成一個(gè)以進(jìn)程名為前綴的json文件listen_test.json;路徑為:out...systemprofilelisten_test.json。

更多鴻蒙開發(fā)知識已更新[qr23.cn/AKFP8k]可前往參考學(xué)習(xí)。

OpenHarmony高級技能.png

  • 6. cfg配置文件

cfg配置文件為linux提供的native進(jìn)程拉起策略,開機(jī)啟動(dòng)階段由init進(jìn)程解析配置的cfg文件進(jìn)行拉起。

{
    "jobs" : [{
            "name" : "post-fs-data",
            "cmds" : [
                "start listen_test"
            ]
        }
    ],
	"services" : [{
            "name" : "listen_test",
            "path" : ["/system/bin/sa_main", "/system/profile/listen_test.json"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }
    ]
}

審核編輯 黃宇

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

    關(guān)注

    59

    文章

    2491

    瀏覽量

    43716
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    KaihongOS筆記本電腦開發(fā)實(shí)戰(zhàn)第九節(jié):全功能TypeC驅(qū)動(dòng)框架適配

    《手把手教你做PC》系列直播課再度開播 !《 KaihongOS筆記本電腦開發(fā)實(shí)戰(zhàn)第九節(jié)九:全功能TypeC驅(qū)動(dòng)框架適配》將于5月21日19:00開播 ↑掃碼入群,領(lǐng)課程講義資料包↑ 深開鴻資深
    發(fā)表于 05-19 18:29

    鴻蒙服務(wù)實(shí)戰(zhàn)-笑笑五子棋(1)

    鴻蒙服務(wù)實(shí)戰(zhàn)-笑笑五子棋(1) 前言 作為鴻蒙應(yīng)用的深度開發(fā)者都應(yīng)該知道,經(jīng)歷了 波瀾壯闊 12 月風(fēng)波 ,到 2025 年新的開始。鴻蒙
    的頭像 發(fā)表于 03-31 09:23 ?212次閱讀
    <b class='flag-5'>鴻蒙</b>元<b class='flag-5'>服務(wù)實(shí)戰(zhàn)</b>-笑笑五子棋(1)

    名單公布!【書籍評測活動(dòng)NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐

    開發(fā)的核心技術(shù),以及鴻蒙應(yīng)用在實(shí)際開發(fā)中的應(yīng)用方法。 本書共分為四篇,共計(jì)16章,分別為鴻蒙開發(fā)基礎(chǔ)篇、
    發(fā)表于 01-20 16:53

    鴻蒙Flutter實(shí)戰(zhàn):14-現(xiàn)有Flutter 項(xiàng)目支持鴻蒙 II

    分別安裝官方的3.22版本,以及鴻蒙社區(qū)的 3.22.0 版本 3.搭建 Flutter鴻蒙開發(fā)環(huán)境 參考文章《鴻蒙Flutter實(shí)戰(zhàn):0
    發(fā)表于 12-26 14:59

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))綜述

    一、綜述 Intents Kit(意圖框架服務(wù))是HarmonyOS級的意圖標(biāo)準(zhǔn)體系 ,意圖連接了應(yīng)用/元服務(wù)內(nèi)的業(yè)務(wù)功能。 意圖框架能幫開發(fā)
    發(fā)表于 11-28 10:43

    鴻蒙原生開發(fā)手記:03-元服務(wù)開發(fā)全流程(開發(fā)服務(wù),只需要看這一篇文章)

    獲取和使用 相較于小程序系統(tǒng)原生絲滑流暢 輕量應(yīng)用程序形態(tài)具備秒開直達(dá)純凈清爽服務(wù)相伴恰合時(shí)宜即用即走賬號相隨一體兩面嵌入運(yùn)行原生智能全域搜索高效開發(fā)生而可信等特征。 特點(diǎn) 秒開直達(dá)即開即用無開屏
    發(fā)表于 11-23 21:52

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))習(xí)慣推薦方案概述

    。 卡片展示效果 意圖框架提供各垂域習(xí)慣推薦在小藝建議中展示使用的標(biāo)準(zhǔn)模板卡片,開發(fā)者無需開發(fā)展示卡片。在展示模板上,會(huì)展示應(yīng)用/元服務(wù)名稱與logo和內(nèi)容必要信息,比如音樂名、音樂圖
    發(fā)表于 11-19 17:59

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))事件推薦開發(fā)者測試

    意圖框架開發(fā)者提供真機(jī)測試能力,即開發(fā)者可連接設(shè)備進(jìn)行調(diào)測。開發(fā)者完成代碼開發(fā)之后,功能正式上架應(yīng)用市場前,可以在HarmonyOS NE
    發(fā)表于 11-18 17:39

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

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

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))事件推薦方案概述

    詳情頁,用戶可在該頁面完成電影取票。 2.卡片展示效果 意圖框架將提供系統(tǒng)標(biāo)準(zhǔn)的事件模板卡片,無需開發(fā)開發(fā)開發(fā)者只需按照具體垂域事件的
    發(fā)表于 11-13 10:38

    HarmonyOS NEXT應(yīng)用元服務(wù)開發(fā)Intents Kit(意圖框架服務(wù))本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS歸一化搜索特性,開發(fā)者將應(yīng)用/元服務(wù)內(nèi)的功能和內(nèi)容通過意圖框架共享到HarmonyOS,即可實(shí)現(xiàn)“一步搜索,內(nèi)容直達(dá)”。 二、典型場景 以“音樂垂域”的“歌曲
    發(fā)表于 11-06 10:59

    鴻蒙Flutter實(shí)戰(zhàn):08-如何調(diào)試代碼

    # 鴻蒙Flutter實(shí)戰(zhàn):如何調(diào)試代碼 ## 1.環(huán)境搭建 參考文章[鴻蒙Flutter實(shí)戰(zhàn):01-搭建開發(fā)環(huán)境](https://g
    發(fā)表于 10-23 16:29

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

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

    京東金融APP的鴻蒙之旅系列專題 新特性篇:意圖框架接入

    建議等。通過這一特性,用戶不僅可以主動(dòng)搜索和調(diào)用所需服務(wù),還能享受到系統(tǒng)智能推薦的個(gè)性化建議。這將有效提升用戶體驗(yàn),帶來全新的流量增長點(diǎn),并為應(yīng)用增量提供強(qiáng)大支持。 ? ? 意圖框架、用戶、
    的頭像 發(fā)表于 10-14 17:10 ?796次閱讀
    京東金融APP的<b class='flag-5'>鴻蒙</b>之旅系列專題 新特性篇:意圖<b class='flag-5'>框架</b>接入

    萬里紅榮獲“首批鴻蒙原生應(yīng)用開發(fā)服務(wù)商和培訓(xùn)服務(wù)商”授牌

    近日,鴻蒙原生應(yīng)用合作交流推介會(huì)在深圳召開,作為鴻蒙生態(tài)重要合作伙伴,萬里紅受邀出席,并榮獲“首批鴻蒙原生應(yīng)用開發(fā)服務(wù)商和培訓(xùn)
    的頭像 發(fā)表于 05-28 10:56 ?869次閱讀
    萬里紅榮獲“首批<b class='flag-5'>鴻蒙</b>原生應(yīng)用<b class='flag-5'>開發(fā)</b><b class='flag-5'>服務(wù)</b>商和培訓(xùn)<b class='flag-5'>服務(wù)</b>商”授牌
    主站蜘蛛池模板: 亚洲综人网 | 欧美天堂在线视频 | 激情亚洲 | 加勒比视频网站 | 久久久久久久性潮 | 久久综合色播 | 在线天堂中文在线网 | 国产黄网站在线观看 | 一区中文字幕 | 午夜一级毛片看看 | 久久99精品久久久久久野外 | 俺去啦最新网址 | 免费看黄色片的软件 | 黄色毛片基地 | 午夜美女久久久久爽久久 | 亚洲美女视频一区二区三区 | 宅男69免费永久网站 | 亚洲成年网 | 国产欧美久久久精品影院 | 色一情一乱一乱91av | 二级黄色大片 | 久草资源网 | 久久精品免看国产 | 国产主播在线播放 | 狠狠色丁香久久综合五月 | 五月婷婷之婷婷 | 狠狠色狠狠色综合日日小蛇 | 免费在线黄视频 | 精品女同同性视频很黄很色 | 欧美一区二区三区在线 | 欧美爱爱帝国综合社区 | 久久久综合视频 | 日韩高清性爽一级毛片免费 | 久久国产精品视频 | 加勒比一到三区 | 4hc44四虎www亚洲 | 99久久99久久精品国产 | 亚洲午夜久久影院 | 夜夜做夜夜爽 | 欧美三级网站 | 黄色的视频免费看 |