EventBus源碼解析(一):概述
EventBus源碼解析(二):Register
EventBus源碼解析(三):Post/PostSticky
EventBus源碼解析(四):優(yōu)化-EventBusIndex
注冊(cè)流程
查找觀察者里面的所有回調(diào)方法
從EventBus.getDefault().register(this)開(kāi)始
- SubscriberMethodFinder負(fù)責(zé)從訂閱者里面找出帶Subscribe注解的方法,里面有一個(gè)METHOD_CACHE緩存注解的方法劣砍,下次同一個(gè)對(duì)象訂閱就不會(huì)重復(fù)查找了
- 如果使用了EventBusIndex(通過(guò)APT生成一個(gè)已經(jīng)分好類(lèi)的方法)捎迫,SubscriberMethodFinder會(huì)優(yōu)先從subscriberInfoIndexes里面找季希,不然通過(guò)反射查找回調(diào)方法侣灶,然后同步到METHOD_CACHE
- 找到對(duì)應(yīng)的方法后用FindState分解成SubscriberMethod。每一個(gè)SubscriberMethod會(huì)放到subscriptionsByEventType.put(eventType, subscriptions)哎垦,這里會(huì)根據(jù)SubscriberMethod的priority排序,后面發(fā)布消息的時(shí)候就會(huì)按優(yōu)先級(jí)來(lái)處理數(shù)據(jù)角虫。
- 如果方法帶有sticky屬性,則從Map<Class<?>, Object> stickyEvents找到上一次發(fā)布過(guò)的事件分發(fā)給這個(gè)方法