一:EventBus是个什么东西
下载地址:https://github.com/greenrobot/EventBus
EventBus就是publish/subscribe消息总线,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。
它的三要素:
Event:事件。可以是任何的对象。
Subscriber:事件订阅者,接收特定的事件。方法以onEvent**开头,一共有四个方法onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync。它们之间的区别在于在不同的线程。等会会有一一举例。
Publisher:事件发布者,用于通知Subscriber有事件发生,可以在任何的地方发布事件。使用也是简单,只要调用post(Object)方法就可以了。
二:如何使用
定义一个事件对象
创建MainActivity并注册订阅者
在MainActivity中实现onEvent**方法
点击发送UI线程中的事件,onEvent执行就是在UI线程中,onEventMainThread也运行在UI线程中,onEventBackgroundThread是另启动了一个线程,onEventAsync也是另启动了一个线程。
点击发送工作线程中的事件,onEvent执行在工作线程中,onEventMainThread运行在UI线程中,onEventBackgroundThread运行在当前的工作线程中,onEventAsync启动了另一个线程。
所以根据上面的结果可以很好的理解各个onEvent的区别:
onEvent:事件在哪个线程发布出来的,就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。
onEventMainThread:事件无论是从哪个线程发布出来的,都会在UI线程中执行。
onEvnetBackground:事件是在UI线程中发布出来的,那么就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么就直接在该子线程中执行。
onEventAsync:使无论事件在哪个线程发布,都会创建新的子线程。