EventBus与Rxandroid之间的比较
来源:互联网 发布:网络爱你恨你 编辑:程序博客网 时间:2024/05/03 19:12
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一样也是基于观察者模式,但是使用的场景确实异步数据流的处理。比如下面的例子
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。
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。
0 0
- EventBus与Rxandroid之间的比较
- 基于RxJava、RxAndroid的EventBus实现
- [Android]基于RxJava、RxAndroid的EventBus实现
- 通过Rxjava和RxAndroid实现的EventBus
- 使用EventBus实现Activity与Fragment之间的跳转
- Otto与EventBus框架比较
- RxAndroid 与 Retrofit的使用
- eventbus组件之间的更新
- VB.NET与C#之间的比较
- java 与oc之间的比较
- iMindMap与Mindmanager之间的比较
- 运算符之间的用法与比较
- javaScript字符串与数字之间的比较
- Integer 与 int 之间的比较
- Hadoop与Spark之间的比较
- RxJava与RxAndroid 被观察者的创建
- RxJava 与RxAndroid 的线程控制
- Rxandroid与MVP的结合(demo)
- MyBatis入门第4天--MyBatis与Spring整合及逆向工程
- new操作符具体干了什么?
- springMVC_01_是什么
- Dubbo源码分析(二)Invocation
- 一张图搞定H5测试
- EventBus与Rxandroid之间的比较
- C++中的标准库模板STL
- 一次性检测出一个文件夹下的所有人脸
- 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)
- swift map reduce 获取下标(index)的方法
- Web版Telnet工具设计与实现
- 大数据的仓库Hive原理(三)
- Dubbo源码分析(三)Exchanger
- 走遍世界 —— 日本