Android greenrobot:EventBus详解

1.线程模型
(1)POSTING:发布事件和接收事件在同一个线程。 
(2)MAIN:不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。 
(3)BACKGROUND:如果事件是在UI线程中发布出来的,那么该事件处理函数就会提交到线程库中运行,如果事件本来就是非UI线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。 
(4)ASYNC:如果使用事件处理函数指定了线程模型为Async,那么无论事件在哪个线程发布,该事件处理函数都会提交到线程库中执行。同样,此事件处理函数中禁止进行UI更新操作。

2.黏性事件
EventBus还支持发送黏性事件。简单讲,就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似,但是订阅该事件后只能收到最近的一次事件;Eventbus使用Map<Class<?>, Object> stickyEvents;结构存储,同一类型的事件只会存储最近一次的;


3.优先级
EventBus支持订阅者订阅事件时指定优先级,优先级是相对于订阅同一类型的订阅者们而言的,优先级高的会优先派发到对应的线程中执行;


4.其他
EventBus实例可使用EventBusBuilder指定参数创建实例;

默认线程库是由EventBusBuilder调用Executors.newCachedThreadPool()创建;

属性说明:
eventInheritance:事件派发时,是否派发到事件类型的父类或父接口订阅者;
strictMethodVerification:注册订阅者时查找方法时,检查方法存在注解Subscribe时,其参数及方法修饰符是否合法;



猜你喜欢

转载自blog.csdn.net/enjoyinwind/article/details/51867565