EventBus笔记

作者: 杨华_6f65 | 来源:发表于2019-06-03 15:12 被阅读2次

    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;
    

    相关文章

      网友评论

        本文标题:EventBus笔记

        本文链接:https://www.haomeiwen.com/subject/yoycxctx.html