概述
EventBus是一款针对Android优化的发布/订阅事件总线。
主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,
线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
1、下载EventBus的类库
jar: http://download.csdn.net/detail/menglele1314/9514367
EventBus的使用
首先必须要入库
onCreate() 注册EventBus EventBus.register(Object ),注册的对象决定发布事件的参数
所在方法的反射范围,一般用this,表示扫描当前类中所有的方法。
onDestroy() 注销EventBus EventBus.unRegister(Object)
发布事件:EventBus.post(参数) 参数可以是任何类型,一般为实体类。
一般在子线程中发布获得的数据,然后通过在主线程中的方法来接收参数,并更新UI。
注意:处理事件的方法一定要加上@Subscribe注解
EventBus.getDefault().register(this);//订阅事件
EventBus.getDefault().post(object);//发布事件
EventBus.getDefault().unregister(this);//取消订阅
PostThread
这是默认的模式,订阅者会在发布者所在的线程中调用。这种模式开销最小,避免了线程之间的切换。所以完成时间很短,并且不需要主线程参与的简单任务建议使用这种模式。例如:
public void onEvent(FirstEvent event) {
log(event.getMsg());
}
MainThread
这种模式订阅者会在主线程中调用。如果事件发布是在主线程,那么事件处理程序会立即被调用。使用这种模式事件处理必须尽快返回,以避免阻塞主线程。例如:
public void onEventMainThreadFirstEvent event) {
log(event.getMsg());
}
BackgroundThread
这种模式订阅者会在后台线程中调用。如果事件发布不在主线程,事件处理方法会直接在发布线程中调用;如果事件发布在主线程,EventBus则会依次传递所有的事件到一个后台进程。使用这种模式必须尽快返回以避免阻塞后台进程。
public void onEventBackgroundThread(MessageEvent event){
log(event.getMsg());
}
Async
事件处理方法在一个单独的线程中调用。他始终是独立于发布线程和主线程。发布事件不需要等待事件处理方法的完成。如果使用耗时的操作应当使用这种模式,比如连接网络。应当避免同一时间触发大量的、长时间运行的异步处理方法,从而限制并发线程的数量。EventBus使用了线程池来有效的重用线程。
public void onEventAsync(MessageEvent event){
log(event.getMsg());
}