EventBus源码解析(一):概述
EventBus源码解析(二):Register
EventBus源码解析(三):Post/PostSticky
EventBus源码解析(四):优化-EventBusIndex
从EventBus.getDefault().register(this)开始
- SubscriberMethodFinder负责从订阅者里面找出带Subscribe注解的方法,里面有一个METHOD_CACHE缓存注解的方法,下次同一个对象订阅就不会重复查找了
- 如果使用了EventBusIndex(通过APT生成一个已经分好类的方法),SubscriberMethodFinder会优先从subscriberInfoIndexes里面找,不然通过反射查找回调方法,然后同步到METHOD_CACHE
- 找到对应的方法后用FindState分解成SubscriberMethod。每一个SubscriberMethod会放到subscriptionsByEventType.put(eventType, subscriptions),这里会根据SubscriberMethod的priority排序,后面发布消息的时候就会按优先级来处理数据。
- 如果方法带有sticky属性,则从Map<Class<?>, Object> stickyEvents找到上一次发布过的事件分发给这个方法