EventBus事件记录

线程没有固定执行顺序,Subscribe需要通过priority值,优先接收到消

在Subscribe订阅的类中操作如下:
// 注册eventBus
EventBus.getDefault().register(this);
// 注销eventbus
EventBus.getDefault().unregister(this);

@Subscribe(threadMode = ThreadMode.Main,priority = 数值越大,优先级高,sticky=true/false)
public void 可自定义方法名称() { }

在被订阅者中执行:
EventBus.getDefault().post(Object);
// 黏粘性事件(注册EventBus后,会立即收到之前PostSticky()的事件)
EventBus.getDefault().postSticky(Object);

Main : 表示事件处理函数的线程在主线程(UI)线程,不能有耗时操作(能接收到子线程中发送的消息)
MAIN_ORDERED : 按顺序执行,测试发现是:执行在Main之后
ASYNC:表示无论事件发布的线程是哪一个,事件处始终会新建一个子线程运行,不能进行UI操作
BACKGROUND:表示处理函数的线程是后台线程,如果发布线程是UI线程,事件处理会创建一个子线程进程处理,如发布线程是子线程,事件在该线程处理
POSTION:(DEFAULD)表示处理函数的线程跟发布事件的线程在同一个线程。

取消事件往下传递:
EventBus.getDefault().cancelEventDelivery(str);
PS: 在取消事件传递的时候有一个注意点,在取消事件传递的方法的线程Mode必须是POSTING的,不然会报event handlers may only abort the incoming event的异常,可以从cancelEventDelivery的源码中看到,在下面代码中的最后一个判断,如果当前事件接收方法不是POSTING,就会抛出这个异常:
2019-06-03 17:19:43.713 22988-22988/com.baidu.test.testandroid E/EventBus: Could not dispatch event: class java.lang.Integer to subscribing class class com.baidu.test.android.eventbus.ShowEventFragment
  org.greenrobot.eventbus.EventBusException:  event handlers may only abort the incoming event
   at org.greenrobot.eventbus.EventBus.cancelEventDelivery(EventBus.java:291)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值