EventBus,RxBus相关介绍

来源:互联网 发布:oracle数据库命令大全 编辑:程序博客网 时间:2024/06/05 05:16

eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。RxBus是一种开发思想,使用了观察者模式的RxJava,RxAndroid实现,使用方式差不多。github地址:
EventBus https://github.com/greenrobot/EventBus

RxBus https://github.com/AndroidKnife/RxBus

一,EventBus 总体概括

eventbus架构图

EventBus有如下特点:

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

二,EventBus的使用三部曲

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

1,定义事件

所谓的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;    }

2,注册/取消订阅者

准备订阅者,在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+"");    }

3,发送事件

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

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

三,RxBus

Rxbus使用方式和EventBus一样,在oncreate 或者 onResume等地方注册,和取消注册(如onPause和onDestroy),在初始化同时,可以指定接收后所运行的线程。RxBus的思想是使用 RxJava 来实现了 EventBus ,而不再需要使用OTTO或者 GreenRobot 的EventBus。

1,注册事件,register

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());    }});

2,取消注册,unregister

RxBus.getInstance().unregister(this);

3,发送事件,Post

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

0 0
原创粉丝点击