我们先从注册的方法开始看起


单例模式 用于返回对象实例 接着进入注册的方法


首先获取订阅的类 然后通过subscriberMethodFinder.findSubscriberMethods()这个方法找到SubscriberMethod这个类的实例我们可以先进入.findSubscriberMethods()这个方法看下 首先是从缓存的一个集合中获取 然后判断缓存中是否有SubscriberMethod的缓存 (防止多次创建) ignoreGeneratedIndex这个标志 表示是否忽略 注解器生成的EventBusIndex 默认为False FalsefindUsingReflection(subscriberClass);这个方法主要是用过反射去拿到subscriberMethods 而findUsingInfo(subscriberClass); 需要使用要编译时注解生成的MyEventBusIndex类中获取订阅方法 通常默认为空 这两个方法先不详细讲然后遍历subscribe(subscriber, subscriberMethod); 这个方法 我们可以进去看下


我们先从参数分析 第一个Object参数 是一个注册的那个类 第二的是一个重新生成的subscriberMethod 然后往下继续看
eventType是代表着。POST()方法里面的参数 然后它又封装了 一个Subscription对象 传入注册类 及已经解析好的subscriberMethod 下一句代码 是从一个MAP集合里面获取一个CopyOnWriteArrayList KEY就是POST方法的那个参数
然后进行判空 如果为空就重新创建一个CopyOnWriteArrayList 然后把这个event 参数 和它一起放subscriptionsByEventType这个集合当中 否则则跑出异常 下一行代码是获取subscriptions 的长度 然后遍历这个subscriptions这个集合 针对优先级 进行排序 然后对注册类的所有参数方法和对应订阅对象 重新封装成一个类(主要是为了 解除注册用) 然后下面的就是处理粘性事件的代码 暂时略过 这次源码分析就到此为止