EventBus,用于事件的发布和订阅的框架.md

eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。后面介绍使用了观察者模式的RxJava,RxAndroid。github地址:https://github.com/greenrobot/EventBus。

eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。后面介绍使用了观察者模式的RxJava,RxAndroid。github地址:https://github.com/greenrobot/EventBus。

一,EventBus 总体概括

eventbus架构图

EventBus有如下特点:

  1. 简化了android各组件之间的通信。
  2. 适用于Activities,Fragments以及后台进程。
  3. 避免了复杂的,潜在的依赖错误和生命周期的问题。
  4. 让代码更简洁。
  5. 响应快速,jar包小。
  6. 有1亿以上的APP应用了enventBus
  7. 在跨进程通信,订阅者优先级方面表现优异。

    二,EventBus的使用三部曲

    EventBus的使用非常简单,定义事件event,注册订阅者,发送事件。

    1,定义事件

    所谓的event,其实也就是一个对象,里面携带了需要传递的信息。
1
2
3
4
5
6
7
8
9
10
11
public class MessageEvent { /* 添加所需的字段 */ }
private String msg;
public MessageEvent(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}

2,注册/取消订阅者

准备订阅者,在onCreate方法或者构造方法里面注册subscribers。取消注册在onStop中调用unregister即可。

1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onStart() {
super.onStart();
//注册EventBus
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
//取消EventBus
EventBus.getDefault().unregister(this);
}

只是注册了订阅者还不行,还需要定义事件的接收者,处理事件。

1
2
3
4
5
6
7
8
9
10
11
12
//事件1接收者:在主线程接收
public void onEvent(String event){
mShowInfo1.setText(event);
}
//事件2接收者:在主线程接收自定义MessageEvent消息
public void onEvent(MessageEvent event){
mShowInfo21.setText(event.getMsg());
}
//事件3接收者:在主线程接收
public void onEventMainThread(Integer event) {
mShowInfo2.setText(event+"");
}

3,发送事件

eventBus.post(event);就可以发送事件,对应的subscribers会在onEvent里面处理这个事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//事件1发送者:在主线程发送
EventBus.getDefault().post("duqian test!");
//事件2发送者:在主线程发送自定义MsgBean消息
EventBus.getDefault().post(new MessageEvent("type"));
//事件3发送者:在子线程发送
int mCount = 0
new Timer().schedule(new TimerTask() {
@Override
public void run() {
EventBus.getDefault().post(mCount);
if (mCount >= 3) {
this.cancel();
mCount = 0;
}
mCount++;
}
}, 0, 1000);

三,总结

EventBus是android平台性能极佳的事件总线,简化了 Activities, Fragments, Threads, Services等组件的通信,最少的代码,最佳的质量。
简单分享下使用,未完待续,欢迎交流。杜乾,Dusan,Q 291902259