Android精选

EventBus笔记

2019-06-03  本文已影响2人  杨华_6f65

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;
上一篇 下一篇

猜你喜欢

热点阅读