1.首先需要定义一个Event的类
public static class MessageEvent { /* Additional fields if needed */ }
2.写一个接收Event事件的方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event){
}
3.进行注册
EventBus.getDefault().register(this);
注册就是用反射把注册的对象类似于Activity,把这个class类的所有方法拿到,然后遍历有没有声明了注解@subscribe的有的话,就把这个方法的Event拿到EventType,用EventType来作为Key 来生成 Map,以后post Event事件就从这个map遍历发送即可。
// EventType -> List<Subscription>,事件到订阅对象之间的映射
private final Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType;
还有就是register时,反射后如果有注解@subscribe的话,会把这个注册的类作为key作为Cach保存起来,下次就不需要做反射的操作了,
private static final Map<Class<?>, List<SubscriberMethod>> METHOD_CACHE = new ConcurrentHashMap<>();
...
List<SubscriberMethod> subscriberMethods = METHOD_CACHE.get(subscriberClass);
存起来的对象是这样的:
public class SubscriberMethod {
final Method method;
final ThreadMode threadMode;
final Class<?> eventType;
final int priority;
final boolean sticky;
网友评论