赞
踩
eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。RxBus是一种开发思想,使用了观察者模式的RxJava,RxAndroid实现,使用方式差不多。github地址:
EventBus https://github.com/greenrobot/EventBus
RxBus https://github.com/AndroidKnife/RxBus
EventBus的使用非常简单,定义事件event,注册订阅者,发送事件。
所谓的event,其实也就是一个对象,里面携带了需要传递的信息。
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;
}
准备订阅者,在onCreate方法或者构造方法里面注册subscribers。取消注册在onStop中调用unregister即可。
@Override
protected void onStart() {
super.onStart();
//注册EventBus
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
super.onStop();
//取消EventBus
EventBus.getDefault().unregister(this);
}
只是注册了订阅者还不行,还需要定义事件的接收者,处理事件。
//事件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+"");
}
eventBus.post(event);就可以发送事件,对应的subscribers会在onEvent里面处理这个事件。
//事件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);
Rxbus使用方式和EventBus一样,在oncreate 或者 onResume等地方注册,和取消注册(如onPause和onDestroy),在初始化同时,可以指定接收后所运行的线程。RxBus的思想是使用 RxJava 来实现了 EventBus ,而不再需要使用OTTO或者 GreenRobot 的EventBus。
Observable<UserBean> observable = RxBus.getInstance().register(this);
observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<UserBean>() {
@Override
public void call(UserBean userBean) {
Log.d("Test", "received :" + userBean.toString());
}
});
RxBus.getInstance().unregister(this);
RxBus.getInstance().post(new UserBean("rxbus", 291902259));
EventBus,RxBus是android平台性能极佳的事件总线,简化了 Activities, Fragments, Threads, Services等组件的通信,最少的代码,最佳的质量。
RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。
如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合retrofit可以很轻松的完成网络的访问。
EventBus有个缺点,使用了EventBus的类都不能进行混淆,否则Evnetbus就找不到OnEvent方法了。
推荐使用RxJava/RxAndroid。看我的另一分享:
RxJava+Retrofit+Gson实现网络请求
简单分享下使用,未完待续,欢迎交流。杜乾,Dusan,Q 291902259
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。