这是这个系列的最后一篇,主要讲讲EventBus的@Subscribe。
Subscribe主要有三个属性:
threadMode:声明事件订阅函数的执行模式
sticky:表示该事件订阅函数是否接收粘性事件,默认为false,表示不接收
priority:声明事件订阅函数的事件接收优先级,默认为0
第二、三个不用说了,今天就着重介绍第一个
threadMode仔细划分起来一共有四个模式
1、ThreadMode.PostThread
这个表示默认模式,表示该事件在哪个线程发布出来的,事件订阅函数就会在这个线程中运行,
也就是说发布事件和接收事件线程在同一个线程。
注意:使用这个方法时,在事件订阅函数中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
2、ThreadMode.MainThread
这个表示UI线程模式,不论事件是在哪个线程中发布出来的,事件订阅者都会在UI线程中执行,接收事件就会在UI线程中运行。
这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在该模式表示的时间订阅函数中是不能执行耗时操作的。
3、ThreadMode.BackgroundThread
子线程执行模式,如果事件是在UI线程中发布出来的,那么事件订阅函数就会在子线程中运行,
如果事件本来就是子线程中发布出来的,那么事件订阅函数直接在该子线程中执行。
4、ThreadMode.Async
强制子线程模式,表示无论事件在哪个线程发布,都会创建新的子线程来执行事件订阅函数
最后讲一讲取消时间订阅
先执行的订阅函数可以取消事件订阅,后面的事件订阅函数将无法收到发布事件,方法如下:
EventBus.getDefault().cancelEventDelivery(event);
关于EventBus的基本讲解就到这里了,谢谢。