EventBus,RxBus相关介绍

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

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

一,EventBus 总体概括

EventBus,RxBus相关介绍_第1张图片

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

你可能感兴趣的:(android,通信,EventBus,Rxbus)