#创作者激励#消息通知之消息订阅相关流程 原创 精华
软通动力HOS
发布于 2023-3-8 11:35
浏览
6收藏
【本文正在参加2023年第一期优质创作者激励计划】
前言
之前我们介绍了在Openharmony消息通知机制中的系统层事件发布流程,了解事件发布的来龙去脉,但消息订阅和事件发布在Openharmony中是息息相关的,在实际的消息使用过程中,我们只有发布消息事件后,才能订阅相关消息,消息订阅也是消息通知中重要不可缺少的一环,因此通过消息订阅,我们才能逐步地展露Openharmony消息通知机制神秘面纱。这篇文章我们来介绍消息订阅在Openharmony 3.1Release中整体流程,深入的分析消息订阅实现原理,消息订阅的函数调用关系,使开发者能够从整体了解消息订阅流程,便于快速适配消息和处理消息通知相关问题。
整体流程
代码流程
1、在消息使用的过程中,首先初始化订阅消息相关参数,添加具体事件如:
COMMON_EVENT_PACKAGE_REMOVED,然后进一步处理调用函数CommonEventManager
::SubscribeCommonEvent。
2、CommonEventManager::SubscribeCommonEvent的实现,关联到CommonEvent类的订阅函数SubscribeCommonEvent上。
3、CommonEvent::SubscribeCommonEvent的具体实现,订阅初始化调用CommonEventProxy的实现类
4、订阅事件通过代理端向调用SendRequest函数发送CES_SUBSCRIBE_COMMON_EVENT消息到服务端。
5、服务端的stub函数接收消息,对不同的消息类型进行处理,当遇到CES_SUBSCRIBE_COMMON_EVENT消息进行处理,调用SubscribeCommonEvent函数
6、IPC服务框架Stub调用server服务端SubscribeCommonEvent函数,通过std::bind绑定函数,绑定到InnerCommonEventManager::SubscribeCommonEvent 函数
7、绑定函数InnerCommonEventManager::SubscribeCommonEvent,详细实现,调用PublishStickyEvent函数
8、PublishStickyEvent函数接收处理事件,调用并调用controlPtr_->PublishStickyCommonEvent函数
9、PublishStickyCommonEvent先检查订阅记录的合法性,然后调用ProcessUnorderedEvent处理相关事件。
10、无序事件处理,绑定函数std::bind调用NotifyUnorderedEvent
11、通知处理函数NotifyUnorderedEvent 通过CommonEventListener调用到代理类EventReceiveProxy 的NotifyEvent函数
12、在EventReceiveProxy::NotifyEvent函数中发送消息CES_NOTIFY_COMMON_EVENT
服务端接收CES_NOTIFY_COMMON_EVENT消息然后调用NotifyEvent函数处理
13、CommonEventListener是EventReceiveStub服务端的实现类因此调用到NotifyEvent函数,最终通过绑定函数std::bind调用OnReceiveEvent函数进行消息的接口处理
14、绑定函数CommonEventListener::OnReceiveEvent最终接收和处理消息
15、接收订阅消息的函数处理COMMON_EVENT_PACKAGE_REMOVED相关消息
从上面我们就梳理整个消息订阅流程,希望对大家有所帮助。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
消息通知.pdf 1.21M 74次下载
赞
8
收藏 6
回复
8
3
6
相关推荐
赞,附件中的大图非常清晰
结合附件图片学习下
感谢梳理