EventBus(事件总线,3.0),类似广播机制具体步骤有四个
一、 注册事件总线
一般在onCreate()函数里面注册
EventBus.getDefault().register(this);
二、 产生事件
String json="Hello Second";
EventBus.getDefault().post(json);
三、 消费事件
@Subscribe(threadMode = ThreadMode.MAIN ,priority = 1,sticky = true)
public void helloEventBus(String msg){
tv.setText(msg);
}
消费事件有如下步骤:
1、订阅(subscribe)事件,只要有事件产生,马上能消费。用标签来注解订阅(@Subscribe)
2、必须有一个消费的函数(例如上面helloEventBus()),不然会报错,名字随便起,建议见名知意。
3、指定消费线程,有四个类型,如下
1)、ThreadMode.MAIN(在主线程消费,能更新UI)。
2)、ThreadMode.POSTING(posting顾名思义,在哪个线程产生的事件,就在哪个线程消费时间)。
3)、ThreadMode.BACKGROUND(background,在后台消费,如果当前线程是主线程就另起一个新的子线
程在后台消费,如果当前线程是子线程,就直接在子线程消费)
4)、ThreadMode.ASYNC(异步消费,无论在子线程还是主线程产生事件,都新开一个子线程消费)
3、sticky(滞留),这个属性默认为FALSE,见名知意,这个只要就是为了能让产生事件滞留一段时间再进行消
费,不过它的产生事件就要用postSticky()函数来产生
4、还可以设置优先运行的级别priority,值越小优先级越低,默认为0。
四、 取消注册事件总线
一般在onDestroy()函数里面取消注册
EventBus.getDefault().unregister(this);
Tip:EventBus的事件总线的消费事件是根据接收的参数类型进行判断是否消费的。例如假如产生事件传递的参数是String类型,那么消费事件的函数的接收参数也必须是String类型,不管有多少个消费事件的函数,只要是String类型的消息发过来,所有的消费函数都会进行消费。