[发明专利]基于事件总线的模块间消息传递机制在审
| 申请号: | 201410551054.7 | 申请日: | 2014-10-16 |
| 公开(公告)号: | CN104360904A | 公开(公告)日: | 2015-02-18 |
| 发明(设计)人: | 龚翔;程超;李奇;罗永江;陈锡林 | 申请(专利权)人: | 四川长虹电器股份有限公司 |
| 主分类号: | G06F9/48 | 分类号: | G06F9/48 |
| 代理公司: | 成都虹桥专利事务所(普通合伙) 51124 | 代理人: | 李凌峰 |
| 地址: | 621000 四*** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 事件 总线 模块 消息 传递 机制 | ||
技术领域
本发明涉及编程技术,特别涉及一种不同功能模块间的消息传递方法。
背景技术
在应用开发过程中,我们总会遇到各个组件模块之间的通信,随着应用功能的增加,需要监听的事件越来越多,越来越多的模块需要监听不同的事件,导致大量的模块需要注册到各事件管理器上,从而出现各模块间耦合严重。代码不易维护和测试,甚至在出现一些bug的时候,会无从入手。
软件产品的终极目标是松耦合,模块之间应该尽量减少耦合度,不要违背软件工程中“高内聚,低耦合”的原则。很多技术的出现都是为解决耦合问题,比如IoC、AOP、SOA、观察者模式、面向接口编程、MVC、事件驱动架构(Event-Driven Architecture)等方法。
发明内容
本发明的目的是为了解决现有软件编程过程中模块间耦合严重的问题。
本发明提供一种基于事件总线的模块间消息传递机制,包括如下步骤:
A.在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;
B.事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;
C.以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;
D.通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。
具体地,步骤D中事件执行方式包括:
PostThread:直接调用订阅对象的回调函数;
MainThread:UI线程的Handler,PendingPostQueue来维护一个事件列表,SendMessage方式发送消息到UI Looper,设定超时机制,如果事件处理超时,会将后续的事件重新发送一次,防止阻塞UI线程;
Async:实现Runnable接口,维护一个PendingPostQueue事件队列,执行在事件总线创建的线程池中;
BackgroundThread:判断当前线程是否是主线程,如果是,执行方式与PostThread一致,如果当前线程不是主线程,则维护一个PendPostQueue事件队列,并执行在事件总线创建的线程池中。
优选地,步骤A中以Subscribe标注订阅函数。
具体地,所述反射机制为java反射机制。
本发明的有益效果是:本发明基于对Publish/Subscribe模式的改进优化,提出事件总线概念,减少创建复杂的类和接口层次结构使用以增强代码的健壮性和可靠性。
具体实施方式
本发明针对现有软件编程过程中模块间耦合严重的问题,提出一种基于事件总线的模块间消息传递机制,包括如下步骤:
A.在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;
B.事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;
C.以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;
D.通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。
事件总线存在如下技术特点:
1、利用java反射机制实现订阅事件函数基于注解(annotation)。
2、事件响应有多线程选择,具体包括如下几种方式:
PostThread:事件响应函数和事件发布在同一线程中执行,这样可以避免线程切换。
MainThread:事件响应函数会在主线程(UI线程)中执行。
BackgroundThread:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,事件总线则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。
Async:事件响应函数在另外一个异步线程中执行。该线程和发布线程、主线程相互独立。处理事件响应函数需要较长的时间来执行。
BackgroundThread:判断当前线程是否是主线程,如果是,执行方式与PostThread一致,如果当前线程不是主线程,则维护一个PendPostQueue事件队列,并执行在事件总线创建的线程池中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川长虹电器股份有限公司,未经四川长虹电器股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410551054.7/2.html,转载请声明来源钻瓜专利网。





