EventBus源碼解析(二):Register

EventBus源碼解析(一):概述
EventBus源碼解析(二):Register
EventBus源碼解析(三):Post/PostSticky
EventBus源碼解析(四):優(yōu)化-EventBusIndex

注冊(cè)流程
查找觀察者里面的所有回調(diào)方法

從EventBus.getDefault().register(this)開始

  1. SubscriberMethodFinder負(fù)責(zé)從訂閱者里面找出帶Subscribe注解的方法,里面有一個(gè)METHOD_CACHE緩存注解的方法,下次同一個(gè)對(duì)象訂閱就不會(huì)重復(fù)查找了
  2. 如果使用了EventBusIndex(通過APT生成一個(gè)已經(jīng)分好類的方法),SubscriberMethodFinder會(huì)優(yōu)先從subscriberInfoIndexes里面找,不然通過反射查找回調(diào)方法,然后同步到METHOD_CACHE
  3. 找到對(duì)應(yīng)的方法后用FindState分解成SubscriberMethod。每一個(gè)SubscriberMethod會(huì)放到subscriptionsByEventType.put(eventType, subscriptions),這里會(huì)根據(jù)SubscriberMethod的priority排序,后面發(fā)布消息的時(shí)候就會(huì)按優(yōu)先級(jí)來處理數(shù)據(jù)。
  4. 如果方法帶有sticky屬性,則從Map<Class<?>, Object> stickyEvents找到上一次發(fā)布過的事件分發(fā)給這個(gè)方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容