ThreadMode可以指定的模式有:
好了,要想使用Eventbus,则要先注册它,看看如何使用
很简单吧,getDefault()其实就是一个单例模式,创建EventBus实例对象,并返回
public static EventBus getDefault() {
if (defaultInstance == null) {
synchronized (EventBus.class) {
if (defaultInstance == null) {
defaultInstance = new EventBus();
}
}
}
return defaultInstance;
}
没啥可说的,继续看register
先看图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RMmfkU4o-1650016916779)(/0/w/1280/h/960/ignore-error/1)]
再看代码
public void register(Object subscriber) {
Class<?> subscriberClass = Class(); // 获取传入的要注册类的字节码文件
List subscriberMethods =
subscriberMethodFinder.findSubscriberMethods(subscriberClass); // ->>分析1
synchronized (this) {
// 遍历订阅方法封装类的集合
for (SubscriberMethod subscriberMethod : subscriberMethods) {
subscribe(subscriber, subscriberMethod); // ->> 分析4
}
}
}
从上面的图可以看出,这个方法其实就是做了2件事
/**
// METHOD_CACHE: 是一个ConcurrentHashMap,key是要注册类的字节码文件,value是这个字节码文件里的所有订阅方法信息的集合,集合的元素是SubscriberMethod,它实际上就是订阅方法的信息类,包含Method对象、线程模式、事件类型、优先级、是否是粘性事等。
List subscriberMethods = (subscriberClass); // 这步实际上就是看看这个注册类的方法是否已经缓存了,缓存过就直接根据类返回
if (subscriberMethods != null) {
return subscriberMethods;
}
// EventBus是支持EventBusBuilder的,如果我们自定义了EventBusBuilder,则ignoreGeneratedIndex为true,否则为false,我们没自定义,所有看false
if (ignoreGeneratedIndex) {
subscriberMethods = findUsingReflection(subscriberClass);
} else {
// ->>分析2
subscriberMethods = findUsingInfo(su
本文发布于:2024-02-03 00:07:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170689002147356.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |