当前位置:   article > 正文

EventBus,RxBus相关介绍_rxbus和eventbus

rxbus和eventbus

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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
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
  • 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+"");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

三,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());
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
2,取消注册,unregister
RxBus.getInstance().unregister(this);
  • 1
3,发送事件,Post
RxBus.getInstance().post(new UserBean("rxbus", 291902259));
  • 1

四,总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/291809
推荐阅读
相关标签
  

闽ICP备14008679号