经常使用事件消息传递多线程
① 一个实现了监听器接口的类,必须把它自身注册到它想要监听的类中去post
② 使用广播,内部的实现都须要IPC,从传递效率上来讲,可能并不太适合上层的组件间的通讯优化
③ Activity间的消息传递时经过startActivityForResult 和onActivityResult,会产生较多的状态或逻辑判断,并且Intent或Bundle传值还得检测类型,容易发生错误this
什么是EventBus?spa
EventBus是一款针对Android优化的发布/订阅事件总线,主要功能是替代Intent,Handler,Broadcast在Fragment,Activity,Service,线程之间传递消息,优势是开销小,代码更优雅,以及将发送者和接收者解耦,他能够让俩个组件相互通讯,可是它们之间并不相互知晓线程
事件总线发布EventBus与otto的区别?接口
什么是事件总线管理:队列
将事件放在队列里面,用于管理和分发事件
保证应用的各个部分之间高效的通讯及数据,事件分发get
模块间解耦
Eventbus包含四个部分:
发布者(publisher),订阅者(subscriber),事件,总线
使用时须要先订阅注册,而后向订阅者发布消息便可
订阅者能够订阅多个事件,发布者能够发布任何事件,发布者同时也能够是订阅者
步骤:订阅,注册,发布,取消注册
基本用法:
注册:
① EventBus.getDefault().register(this);
② EventBus.getDefault().register(new Event());
③ EventBus.getDefault().register(this,methodName,Event.class);
三个参数:消息订阅者(接收者),接收方法名,事件类
取消注册:
① EventBus.getDefault().unregister(this);
② EventBus.getDefault().unregister(new Event());
订阅处理数据:
① onEventMainThread 运行在主线程中,能够在这直接操做UI
② onEvent 与发布者在同一个线程
③ onEventPostThead 发布者发送数据的线程与接收者接收的线程是一个
④ onEventAsync 执行在一个新的线程,适用多个多线程处理,内部有线程池管理,在独立线程中运行
⑤ onEventBackgroundThread 执行在子线程,若是发布者在子线程则直接执行,若是不是在子线程那么建立一个新的线程,在后台线程中运行
发布:EventBus.getDefault().post(new Event(meg));