EventBus与Rxandroid之间的比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lgzaaron/article/details/51781395
EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。使用EventBus可以避免搞出一大推的interface,仅仅是为了实现组件间的通讯,而不得不去实现那一推的接口。

RxJava和EventBus一样也是基于观察者模式,但是使用的场景确实异步数据流的处理。比如下面的例子

Observable.from()
.map((x) -> x + 1)
.filter((x) -> x % 2 == 0)
.subscribe()

通过引入函数式的方式来处理数据流,看起来舒服多了。另外RxJava有大量丰富强大的operator,可以满足你的大部分数据处理需求。RxJava另一个强大的地方就是他的scheduler,你可以为Observable和Subscriber指定不同的执行线程,在Android中,你就可以方便的将Observable指定在IO线程中运行,Subscriber在UI线程中运行。


如以上所说的各种对数据的处理了,而对于处理完后的数据处理是一样的都是观察者模式来通知,也可以把 RxJava 进一步封装出一个 EventBus(RxBus) 库,实现可以参考:Implementing an Event Bus with RxJava 。当然同时使用这两个库也是可以的,并不会冲突,即异步数据处理用 RxJava,操作完成后的事件通知用 EventBus 事件总线库,这个看你心情了。P.S. RxJava 的一大爽点也就是链式调用,代码调用流程异常清晰 ;),如果结合 EventBus 来 post 最终结果的话不是满满的乱入感了吗。

EventBus 这个库也有蛋疼之处:为了性能考虑接收事件的函数都以 onEvent 开头;事件一般都要写个对应的 Event 类出来,导致会都很多这些类,考虑到一个应用中这些事件发布一般也不会很多,在可接受范围就行了。

哪个方便的问题那 RxJava 肯定入门比较难,一般文章都会说它有个陡峭的学习过程, 最后整理了个 RxJava 的学习资料出来:lzyzsd/Awesome-RxJava · GitHub


RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。
如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合sqare公司的retrofit可以很轻松的完成网络的访问。
我们知道,在Android中异步操作一般使用AsycTask来完成,但是AsycTask有很多缺点,如不能方便的终止任务的执行等。
RxAndroid完全可以替代AsycTask来完成各种异步操作,而且还有BindActivity和BindFragment方法,你根本不需要考虑异步操作时的Activity和Fragment的生命周期问题,还有更加强大的的链式调用,可以使程序很简洁。
EventBus有个缺点就是凡是使用了EventBus的类都不能进行混淆了,否则Evnetbus就找不到OnEvent方法了。
以上,推荐使用RxAndroid。


展开阅读全文

没有更多推荐了,返回首页