HiSysEvent订阅指导

About 5 min

HiSysEvent订阅指导

概述

HiSysEvent提供了跨进程订阅机制,开发者可以通过注册订阅接口实时获取关注的事件,例如电池模块侦听功耗相关的事件,用于分析耗电情况。

接口说明

表 1 HiSysEvent订阅接口

接口名

描述

int HiSysEventManager::AddEventListener(std::shared_ptr<HiSysEventSubscribeCallBackBase> listener, std::vector<struct ListenerRule>& rules)

接口功能:注册订阅HiSysEvent系统事件侦听对象,可设置规则订阅某些事件。

输入参数:

  • listener:订阅回调对象。
  • rules:事件订阅规则。

返回值:

  • 0:订阅成功,重复订阅。
  • 1:订阅成功,初次订阅。
  • 其他返回值:订阅失败。

void HiSysEventManager::RemoveListener(std::shared_ptr<HiSysEventSubscribeCallBackBase> listener)

接口功能:移除订阅hisysevent系统事件侦听对象。

输入参数:

  • listener:订阅回调对象。

返回值:无。

表 2 ListenerRule订阅规则对象

属性名称

描述

uint32_t ruleType

规则类型(匹配范围包括domain以及eventName):

  • 1:全字符匹配。
  • 2:前缀匹配。
  • 3:正则表达式匹配。
  • 其他值:无效的匹配方式。

std::string domain

  • domain:事件所属领域,如果传入的是空字符串,则默认事件领域字段匹配成功。

std::string eventName

  • eventName:事件的名称,如果传入的是空字符串,则默认事件名称字段匹配成功。

表 3 HiSysEventSubscribeCallBackBase订阅对象

接口名称

描述

void HiSysEventSubscribeCallBackBase::OnHandle(const std::string& domain, const std::string& eventName, const int eventType, const std::string& eventDetail)

接口功能:订阅事件的回调接口。

输入参数:

  • domain:事件所属领域。
  • eventName:事件的名称。
  • eventType:事件类型。
  • eventDetail:包含事件相关信息的字符串,以json的形式体现。

返回值:无。

开发实例

C++接口实例

本实例介绍如何订阅domain=HIVIEWDFX的所有系统事件。

  1. 源代码开发:

    • 引入对应的头文件:

      hisysevent_manager.h。

    • 实现回调接口:

      HiSysEventSubscribeCallBackBase::OnHandle(const std::string& domain, const std::string& eventName, const int eventType, const std::string& eventDetail)。

    • 注册回调对象:

      HiSysEventManager::AddEventListener(std::shared_ptr<HiSysEventSubscribeCallBackBase> listener, std::vector<struct ListenerRule>& rules)。

    // 以下是订阅domain=HIVIEWDFX的所有系统事件的应用例子
    #include "hisysevent_manager.h"
    #include <iostream>
    namespace OHOS {
    namespace HiviewDFX {
    // 实现订阅回调对象的接口
    void HiSysEventToolListener::OnHandle(const std::string& domain, const std::string& eventName,
        const int eventType, const std::string& eventDetail)
    {
        std::cout << eventDetail << std::endl;
    }
    
    void HiSysEventToolListener::OnServiceDied()
    {
        std::cout << std::string("service disconnect, exit") << std::endl;
        exit(0);
    }
    } // namespace HiviewDFX
    } // namespace OHOS
    
    // 调用订阅接口注册开发实现的订阅对象
    auto toolListener = std::make_shared<HiSysEventToolListener>();
    struct ListenerRule rule;
    rule.ruleType = 1; // 1: default type
    rule.domain = "HIVIEWDFX";
    std::vector<struct ListenerRule> sysRules;
    sysRules.push_back(rule);
    HiSysEventManager::AddEventListener(toolListener, sysRules);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
  2. 编译设置:

    在BUILD.gn编译文件中,需要添加依赖hisysevent_native部件的libhisyseventmanager库。

    external_deps = [ "hisysevent_native:libhisyseventmanager",  ]
    
    1