EventBus源码解析(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39507260/article/details/84930535

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();
    }

猜你喜欢

转载自blog.csdn.net/qq_39507260/article/details/84930535