EventBus主要用于组件之间的通信,由GreenRobot发布
使用
1) implementation 'org.greenrobot:eventbus:3.1.1'
2)工具类
public class EventBusUtils { public static void register(Object subcriber) { EventBus.getDefault().register(subcriber); } public static void unregister(Object subcriber) { EventBus.getDefault().unregister(subcriber); } /** * 发送事件 * @param info */ public static void sendEvent(BaseEventInfo info) { EventBus.getDefault().post(info); } /** * 发送粘性事件 * @param info */ public static void sendStrickyEvent(BaseEventInfo info) { EventBus.getDefault().postSticky(info); } /** * 终止事件的分发 * @param event */ public static void cancelEventIntercept(Object event) { EventBus.getDefault().cancelEventDelivery(event);} }
接收事件:
@Subscribe(threadMode = ThreadMode.POSTING , sticky = true , priority = 20) public void onEvent(EventTest event) { System.out.println("receiver event"); }
threadMode有四个值
POSTING:事件发送和接收在同一线程
MAIN:事件接收在主线程
BACKGROUND:事件接收在后台线程,如果发布线程在主线程,接收事件会开一个后台线程,如果发布线程在子线程,那么接收事件会在改线程内处理
ASYNC:无论事件发布在哪个线程,接收事件都会新开一个线程处理事件
sticky:是否粘性,如果赋值为true ,那么在事件发送之前未订阅,事件发布之后再订阅,仍然可以接收到该事件,
如果要接收到粘性事件除了需要在接收方法的注解上给sticky赋值为true,还需要在发送事件时使用sendSticky().
priority优先级:可以给接收方法赋予不同的优先级,根据优先级的不同,接收到事件的顺序不同,优先级越高,越快接收到事件
先接收到事件的方法可以通过cancelEventDelivery()让事件停止分发这样低优先级的方法就接收不到事件了.
注:
1)只有给ThredMode赋予相同的值的情况下,priority才是有效的.
2)只有ThreadMode的值是POSTING时,cancelEventDelivery()才是有效的.