此文章适用于使用过EventBus,不了解原理。大牛勿喷。。。(本文章写的MyEventBus只是做为理解EventBus的原理,不适合用在项目中)
没有用过请先移步至Github,官方已经对流程和使用已经做了详细的描述
EventBus核心是反射
1、注册的时候通过反射拿到类的方法(带Subscribe注解的)存起来
2、发送(post)的时候遍历储存的,对类型一样的通过反射执行
新建MyEventBus类,单例 如下
private static volatile MyEventBus myEventBus;
private MyEventBus() {
}
public static MyEventBus getDefault() {
if (myEventBus == null) {
synchronized (MyEventBus.class) {
if (myEventBus == null) {
myEventBus = new MyEventBus();
}
}
}
return myEventBus;
}
1、设计一个Map储存key为注册类的对象 vlase为所有带Subscribe注解的方法如下
private Map<Object, List<Method>> METHOD_CACHE = new HashMap<>();
2、调用register判断方法是否已经存储