版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1.Subscribe 注解接口
/**
* 注解接口:用于注解订阅方法
*/
@Documented
@Retention(RetentionPolicy.RUNTIME) //运行时才处理注解
@Target({ElementType.METHOD}) //注解目标为方法
public @interface Subscribe {
//指定线程模型,默认POSTING
ThreadMode threadMode() default ThreadMode.POSTING;
//是否发送订阅之前的最后一个事件,默认否
boolean sticky() default false;
//订阅者级别,越高的越先收到事件。默认0
int priority() default 0;
}
2.EventBusBuilder
/**
* EventBus构造器。创建一个新的EventBus,配置各种属性
*/
public class EventBusBuilder {
private final static ExecutorService DEFAULT_EXECUTOR_SERVICE = Executors.newCachedThreadPool();
boolean logSubscriberExceptions = true; //是否打印订阅异常
boolean logNoSubscriberMessages = true; //是否打印无订阅者异常
boolean sendSubscriberExceptionEvent = true; //是否发送订阅异常的事件
boolean sendNoSubscriberEvent = true; //是否发送无订阅者事件
boolean throwSubscriberException; //是否抛出订阅异常
boolean eventInheritance = true; //是否允许事件继承
boolean ignoreGeneratedIndex; //是否忽略注解
boolean strictMethodVerification; //是否执行发放认证
ExecutorService executorService = DEFAULT_EXECUTOR_SERVICE;
List<Class<?>> skipMethodVerificationForClasses; //跳过方法认证的类
List<SubscriberInfoIndex> subscriberInfoIndexes; //注解订阅方法的集合
Logger logger; //日志
MainThreadSupport mainThreadSupport; //主线程支持类
EventBusBuilder() {
}
/**
* Default: true
*/
public EventBusBuilder logSubscriberExceptions(boolean logSubscriberExceptions) {
this.logSubscriberExceptions = logSubscriberExceptions;
return this;
}
/**
* Default: true
*/
public EventBusBuilder logNoSubscriberMessages(boolean logNoSubscriberMessages) {
this.logNoSubscriberMessages = logNoSubscriberMessages;
return this;
}
....省略部分类似代码
/**
* 创建一个默认的EventBus
*/
public EventBus installDefaultEventBus() {
synchronized (EventBus.class) {
if (EventBus.defaultInstance != null) {
throw new EventBusException("Default instance already exists." +
" It may be only set once before it's used the first time to ensure consistent behavior.");
}
EventBus.defaultInstance = build();
return EventBus.defaultInstance;
}
}
/**
* 以配置创建一个新的EventBus
*/
public EventBus build() {
return new EventBus(this);
}
}
用法
private void aaa() {
EventBusBuilder busBuilder = new EventBusBuilder()
.logSubscriberExceptions(true)
.logNoSubscriberMessages(true)
.sendSubscriberExceptionEvent(true)
.sendNoSubscriberEvent(true)
.throwSubscriberException(true)
.eventInheritance(true)
.executorService(ExecutorService)
.skipMethodVerificationFor(Class)
.ignoreGeneratedIndex(true)
.strictMethodVerification(true)
.addIndex(SubscriberInfoIndex)
.logger(Logger);
EventBus eventBus = busBuilder.build();
}