EventBus

EventBus

是一种用于Android的事件发布-订阅总线。

  • 事件:普通的Java对象,可以携带数据。
  • 订阅:在订阅方订阅。
  • 发布:在发布方将事件发布出来。

EventBus_第1张图片

注册

在订阅方进行注册,一般在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)

粘性事件

通常我们都是先订阅,后发布,而粘性事件就是先发布,后订阅。
EventBus_第2张图片

回调方法

注解

@Subscribe(sticky = true)

发布方

EventBus.getDefault().postSticky(事件对象);

你可能感兴趣的:(Android)