[發明專利]基于事件總線的模塊間消息傳遞機制在審
| 申請號: | 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.szxzyx.cn/pat/books/201410551054.7/2.html,轉載請聲明來源鉆瓜專利網。





