1. 源码分析
现象描述:
2.1. MainActivity里面注册 EventBus.register(this)
2.2. MainActivity里面解绑 EventBus.unRegister(this)
2.3. 把需要接收的方法采用注解Subscribe
2.4.在任意的地方只要调用 EventBus.post就会执行 Subscribe的注解方法,前提是同类型的对象
自己去写的时候会怎么去实现?EventBus怎么实现。
第一步:
findSubscriberMethods()
去解析注册者对象的所有方法,并且找出带有注解 Subscribe 注解的的方法,
然后通过Annotation解析所有细节参数(threadMode,priority,sticky,eventType,method),
把这些参数封装成一个 SubscriberMethod,添加到集合返回。
第二步:
subscribe()
解析所有 SubscriberMethod的eventType,然后按照要求解析成
Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType
的格式,key 是 eventType,value就是 Subscription 的列表,Subscription包含两个属性subscriber,SubscriberMethod
第三步:
post()
遍历 subscriptionsByEventType,找到符合的方法调用方法的 method.invoke() 执行。
第四部:
unregister()
移除