RxJava和RxBus如何代替EventBus?
扫描二维码
随时随地手机看文章
最近在学习Rxjava相关的知识,发现我们完全可以用Rxjava里面的知识来代替以前项目中使用的EventBus.
在介绍实现前,先说说几点可能会有疑惑的问题:
首先,明确一下RxBus的概念
RxBus 名字看起来像一个库,但它并不是一个库,而是一种模式,它的思想是使用 RxJava 来实现了 EventBus ,而让你不再需要使用OTTO或者 GreenRobot 的EventBus。
其次,为什么要使用RxBus来代替EventBus
我之所以想用RxBus来代替EventBus,一是为了自己更加熟悉Rxjava的相关用法,二是为了减少程序引用的第三方库(既然都用了Rxjava 没必要再去引入EventBus)。
当然,如果对Rxjava没有一点了解,或者说只是想简单的使用EventBus的功能,建议还是使用Otto或者GreenRobot的EventBus,这二者都可以通过注解非常简单的使用。
下面是正文:
public class RxBus {
private static RxBus instance;
private Vector
Rxbus代码如上,使用方式和EventBus一样,在合适的地方(比如oncreate 或者 onResume)注册,和取消注册(如onPause和onDestroy),在初始化同时,我们可以指定接收后所运行的线程等其他操作
Observableobservable = RxBus.getInstance().register(this); observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() { @Override public void call(UserBean userBean) { Log.d("Test", "received :" + userBean.toString()); } });
RxBus.getInstance().unregister(this);
发送事件的方式:
RxBus.getInstance().post(new UserBean("rxbus", 99));
当然我们还可以在这个的基础上加上注解的方式 来让实现更方便,这个就留着后面再处理了!