日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )

發布時間:2025/6/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、根據事件類型獲取訂閱者
  • 二、調用訂閱方法





一、根據事件類型獲取訂閱者



接收到了 發布者 Publisher 發送給本消息中心 的 Event 消息事件對象 , 將該事件對象轉發給相應接收該類型消息的 訂閱者 ( 訂閱對象 + 訂閱方法 ) ;

通過事件類型到 Map<Class<?>, CopyOnWriteArrayList<MySubscription>> subscriptionsByEventType 集合中查找相應的 訂閱對象 + 訂閱方法 ;

獲取事件類型 :

// 獲取事件類型Class<?> eventType = event.getClass();

Map<Class<?>, CopyOnWriteArrayList<MySubscription>> subscriptionsByEventType 集合中查找事件類型對應的訂閱者 ;

// 獲取事件類型對應的 訂閱者 集合CopyOnWriteArrayList<MySubscription> subscriptions =subscriptionsByEventType.get(eventType);

遍歷并調用訂閱者 :

// 確保訂閱者大于等于 1 個if (subscriptions != null && subscriptions.size() > 0) {// 遍歷訂閱者并調用訂閱方法for (MySubscription subscription : subscriptions) {postSingleSubscription(subscription, event);}}

部分代碼示例 :

/*** 接收到了 發布者 Publisher 發送給本消息中心 的 Event 消息事件對象* 將該事件對象轉發給相應接收該類型消息的 訂閱者 ( 訂閱對象 + 訂閱方法 )* 通過事件類型到* Map<Class<?>, CopyOnWriteArrayList<MySubscription>> subscriptionsByEventType* 集合中查找相應的 訂閱對象 + 訂閱方法* @param event*/public void post(Object event) {// 獲取事件類型Class<?> eventType = event.getClass();// 獲取事件類型對應的 訂閱者 集合CopyOnWriteArrayList<MySubscription> subscriptions =subscriptionsByEventType.get(eventType);// 確保訂閱者大于等于 1 個if (subscriptions != null && subscriptions.size() > 0) {// 遍歷訂閱者并調用訂閱方法for (MySubscription subscription : subscriptions) {postSingleSubscription(subscription, event);}}}



二、調用訂閱方法



通過反射調用訂閱方法 ;

在 MySubscription 中封裝了 訂閱者對象 和 訂閱方法 , 訂閱方法中封裝了 Method 方法 ;

直接調用 Method 對象的 invoke 方法 , 通過反射調用訂閱方法 , 傳入的第一個參數是 訂閱者對象 , 即訂閱方法所在的對象 , 傳入的第二個參數是 訂閱方法接收的事件參數對象 ;

/*** 調用訂閱者的訂閱方法* @param subscription 訂閱者對象 + 訂閱方法* @param event 發布者傳遞的消息事件*/private void invokeMethod(MySubscription subscription, Object event) {try {// 通過反射調用訂閱方法subscription.getSubscriberMethod().getMethod().invoke(subscription.getSubscriber(), // 訂閱者對象event // 事件參數類型);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}

總結

以上是生活随笔為你收集整理的【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。