【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )
生活随笔
收集整理的這篇文章主要介紹了
【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】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 异步操作】Androi
- 下一篇: 【EventBus】事件通信框架 ( 发