EventBus是Android端的一个订阅/发布的消息总线,用在应用程序内,组件之间,线程之间的通信,并且由于事件可以是任意类型的对象,所以使用起来更加的方便快捷。
角色:
Event:就是事件啦
Subscriber:订阅者,接收特定事件的对象,主要通过onEventXXX()回调接口接收
Publisher:发布者,post事件,通知订阅者
以上都是官方介绍,比我说的要简洁易懂的多,我就不赘叙了,就知道EventBus主要是能更简洁快速的实现应用内通信就行了。
现在,就说说我在工作中是怎么运用EventBus的吧,可能会给大家使用上增加一些灵感
先模仿一下EventBus在网络请求中的应用
EventBus不管实在Activity中还是在Fragment中,都需要进行注册和取消注册,这点跟广播是一致的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
分别在onCreate()和onDestory()方法里面。
建议写一个BaseActivity和BaseFragment,在里面分别进行注册和取消注册,我们在使用时只需要继承一下即可,就不需要大量冗余代码。
然后,建立一个数据传递事件,例如BusEvent
/**
* 数据传递事件
*/
public class BusEvent{
public enum Type {
/**
* 登陆成功
*/
LOGIN_SUCCESS,
/**
* 登陆失败
*/
LOGIN_FAILURE,
}
public Type type;
public String tag;
public Object data;
public DataEvent(Type type, String tag, Object data) {
this.type = type;
this.tag = tag;
this.data = data;
}
type标志请求类别,tag标志在那个类中的请求,data标志请求数据
在请求数据成功后,可以用EvnetBus进行发送
EventBus.getDefault().post(new BusEvent(type, tag, data));
然后定义接收
public void onEventMainThread(BusEvent event) {
if(event.tag.equals(tag))
{
switch(event.type){
case LOGIN_SUCCESS:
//登陆成功处理
break;
case LOGIN_FAILURE:
//登陆失败处理
break;
}
}
}
很简单吧,这样就可以实现简单的数据传递了