EventBus
是一种用于Android的事件发布-订阅总线。
- 事件:普通的Java对象,可以携带数据。
- 订阅:在订阅方订阅。
- 发布:在发布方将事件发布出来。
注册
在订阅方进行注册,一般在onStart方法进行注册。
EventBus.getDafault().register(this);
取消注册
在订阅方取消注册,一般在onStop方法
EventBus.getDefault().unregister(this);
事件回调函数
在订阅方
- 必须要添加注解 @Subscribe
- 方法必须为 public void
例:
@Subscribe
public void 方法名(事件类 事件引用){
}
事件的发布
在发布方进行。
EventBus.getDefault().post(事件对象);
EventBus–ThreadMode
控制回调函数运行在那个线程。
- POSTING:在哪一个线程发布,回调函数就在哪个线程执行。
- MAIN:回调函数一定在主线程执行
- MAIN-ORDERED:回调函数在主线程执行,但与MAIN不同的是:在MAIN模式下,发布方是会被订阅方堵塞的(假如回调是一个耗时操作,则后续指令须在此回调执行完毕后才能处理),而在MAIN-ORDERED模式下,后续指令会立即执行。
- BACKGROUNG:若发布方在子线程发布,则回调函数也在其线程执行,若发布方在主线程发布,则回调函数会在子线程进行。
- ASYNC:回调函数会在另外一个独立的新开的线程中执行,异步,不会造成阻塞
模式的设置方法
修改回调函数的注解
@Subscribe(threadMode = ThreadMode.POSTING)
粘性事件
通常我们都是先订阅,后发布,而粘性事件就是先发布,后订阅。
回调方法
注解
@Subscribe(sticky = true)
发布方
EventBus.getDefault().postSticky(事件对象);