精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

鴻蒙開發實戰:【系統服務框架部件】

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

簡介

在系統服務管理子系統中safwk組件定義OpenHarmony中SystemAbility的實現方法,并提供啟動、注冊等接口實現。

系統架構

圖 1 系統服務框架圖

說明

接口說明

image.png

使用說明

SystemAbility實現一般采用XXX.cfg + profile.json + libXXX.z.so的方式由init進程執行對應的XXX.cfg文件拉起相關SystemAbility進程。

C++實現SystemAbility

示例代碼如下:

  • 1. 定義IPC對外接口IXXX

定義該服務對外提供的能力集合函數,統一繼承IPC接口類IRemoteBroker;同時實現該IPC對外接口唯一標識符DECLARE_INTERFACE_DESCRIPTOR(XXX);該標識符用于IPC通信的校驗等目的。

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. 定義服務端通信代碼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的實現類
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++實現的SA必須配置相關System Ability的profile配置文件才會完成SA的加載注冊邏輯,否則沒有編寫profile配置的System Ability不會完成注冊。配置方法如下:

在子系統的根目錄新建一個以sa_profile為名的文件夾,然后在此文件夾中新建兩個文件:一個以serviceId為前綴的json文件,另外一個為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. 進程名字即該SystemAbility要運行的進程空間,此字段是必填選項。
  2. 一個SystemAbility配置文件只能配置一個SystemAbility節點,配置多個會導致編譯失敗。
  3. SystemAbility的name為對應的serviceId必須與代碼中注冊的serviceId保持一致,必配項。
  4. libpath為SystemAbility的加載路徑,必配項。
  5. run-on-create:true表示進程啟動后即向samgr組件注冊該SystemAbility;false表示按需啟動,即在其他模塊訪問到該SystemAbility時啟動,必配項。
  6. distributed:true表示該SystemAbility為分布式SystemAbility,支持跨設備訪問;false表示只有本地跨IPC訪問。
  7. bootphase:可不設置;可以設置的值有三種:BootStartPhase、CoreStartPhase、OtherStartPhase(默認類型),三種優先級依次降低,當同一個進程中,會優先拉起注冊配置BootStartPhase的SystemAbility,然后是配置了CoreStartPhase的SystemAbility,最后是OtherStartPhase;當高優先級的SystemAbility全部啟動注冊完畢才會啟動下一級的SystemAbility的注冊啟動。
  8. dump-level:表示systemdumper支持的level等級,默認配置1。
  9. BUILD.gn中subsystem_name為相應部件名稱;sources表示當前子系統需要配置的SystemAbility列表,可支持配置多個SystemAbility。

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

更多鴻蒙開發知識已更新[qr23.cn/AKFP8k]可前往參考學習。

OpenHarmony高級技能.png

  • 6. cfg配置文件

cfg配置文件為linux提供的native進程拉起策略,開機啟動階段由init進程解析配置的cfg文件進行拉起。

{
    "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"]
        }
    ]
}

審核編輯 黃宇

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

    關注

    57

    文章

    2310

    瀏覽量

    42745
收藏 人收藏

    評論

    相關推薦

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦開發者測試

    意圖框架開發者提供真機測試能力,即開發者可連接設備進行調測。開發者完成代碼開發之后,功能正式上架應用市場前,可以在HarmonyOS NE
    發表于 11-18 17:39

    鴻蒙原生開發手記:01-元服務開發

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

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦方案概述

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

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS歸一化搜索特性,開發者將應用/元服務內的功能和內容通過意圖框架共享到HarmonyOS,即可實現“一步搜索,內容直達”。 二、典型場景 以“音樂垂域”的“歌曲
    發表于 11-06 10:59

    鴻蒙Flutter實戰:08-如何調試代碼

    # 鴻蒙Flutter實戰:如何調試代碼 ## 1.環境搭建 參考文章[鴻蒙Flutter實戰:01-搭建開發環境](https://g
    發表于 10-23 16:29

    鴻蒙Flutter實戰:07混合開發

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

    鴻蒙OS開發實例:【HarmonyHttpClient】網絡框架

    鴻蒙上使用的Http網絡框架,里面包含純Java實現的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優雅使用注解、自動解析j
    的頭像 發表于 04-12 16:58 ?802次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發</b>實例:【HarmonyHttpClient】網絡<b class='flag-5'>框架</b>

    鴻蒙實戰開發:【國際化部件

    **國際化部件**為應用提供了一系列國際化接口,包括:時間日期格式化、數字格式化、月份星期格式化、單復數、度量衡等相關接口。基于這些國際化接口,開發者可以設計并實現具有良好國際化能力的應用,從而可以高效、低成本的實現應用的本地化。
    的頭像 發表于 03-21 22:07 ?295次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>實戰</b><b class='flag-5'>開發</b>:【國際化<b class='flag-5'>部件</b>】

    鴻蒙開發實戰:【Hdf Framework】

    該倉主要存放OpenHarmony驅動子系統核心源碼信息(包括驅動框架、配置管理、配置解析、驅動通用框架模型、硬件通用平臺能力接口等),旨在為開發者提供更精準、更高效的
    的頭像 發表于 03-21 20:29 ?435次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b>:【Hdf Framework】

    鴻蒙開發實戰:【系統服務管理部件

    samgr組件是OpenHarmony的核心組件,提供OpenHarmony系統服務啟動、注冊、查詢等功能。
    的頭像 發表于 03-21 17:56 ?323次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b>:【<b class='flag-5'>系統</b><b class='flag-5'>服務</b>管理<b class='flag-5'>部件</b>】

    鴻蒙開發實戰:【系統服務管理部件

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

    鴻蒙開發實戰:【電話服務系統

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

    鴻蒙實戰項目開發:【短信服務

    數據管理 電話服務 分布式應用開發 通知與窗口管理 多媒體技術 安全技能 任務管理 WebGL 國際化開發 應用測試 DFX面向未來設計 鴻蒙系統
    發表于 03-03 21:29

    鴻蒙開發用什么語言?

    兩種開發方向 我們常說鴻蒙開發,但是其實鴻蒙開發分為兩個方向: 一個是系統級別的
    的頭像 發表于 01-30 16:12 ?1494次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>用什么語言?

    鴻蒙南向開發—OpenHarmony技術編譯構建框架

    概述 OpenHarmony編譯子系統是以GN和Ninja構建為基座,對構建和配置粒度進行部件化抽象、對內建模塊進行功能增強、對業務模塊進行功能擴展的系統,該系統提供以下基本功能: 以
    發表于 01-04 16:47