RxJava学习笔记

来源:互联网 发布:淘宝商品种类 编辑:程序博客网 时间:2024/06/12 01:20

RxJava学习笔记


在开始之前,先放上github的链接和引入依赖的Gradle的代码:

github:
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid

引入依赖:
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

以及参考资料:http://gank.io/post/560e15be2dca930e00da1083

1.RxJava是什么?


RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。简单来说,就是一个对异步操作进行了封装的库。这里说他是类库也不太合适,因为它更像是一种做异步操作的方法。采用观察者模式,对异步操作的方法进行链式调用。

2.RxJava怎么用?


对RxJava怎么用,我这里总结为三步: 第一步  建立观察者 第二步 创建被观察者第三步 用被观察订阅观察者  

第一步:建立观察者

观察者,即Observer/Subscriber,它决定了事件触发有怎样的行为。实现了Subscriber接口要实现三个方法:OnNext()OnCompleted()onError()onStart()`。在执行时,如其方法名所言,依次执行。

第二步:创建被观察者

Observerable即被观察者,他决定什么时候触发事件,以及会触发怎样的事件。常用的创建方法有onCreate(),onJust(),onfrom(),其中onCreate()方法是最基本的创建,这里会有一个回调方法call(),在这个方法里可以自由调用onNext(),onCompleted()方法,而onJust(),需要传入一系列要调用的参数,然后自动按onNext(),onCompleted()的顺序执行,onfrom()也一样,只不过传给他的参数是一个数组。

第三步:订阅

创建了观察者和被观察者后,要做的就是订阅了,即用被观察者订阅观察者,形成一条链。
这里subscribe()有两种用法,一种是直接把创建好的observer或subscriber当做参数传进去。第二种用法,是不创建完整的观察者,而是通过Action0.Action1创建不完整的回调call(),然后传入subscribe()中,这样就可以自动创建Subscriber,此时的call()方法就充当了onNext()onError等方法。

RxJava牛逼在哪?


1.控制线程

以上的内容知识实现了操作,真正要做到异步操作需要被观察者通过subscribOn()方法指定订阅发生的线程(事件产生线程)和observeOn()指定观察者的回调所在的线程(事件消费线程)。RXJava牛逼的地方不仅仅是线程可控,还有自由的切换线程。其中,observeOn()方法可在想要切换线程时随时调用,而subscribOn()方法虽然可放在任何地方,但是只能调用一次。

2.变换

所谓变换,即将事件序列中的对象或整个对象序列转换为不同的对象或对象序列。具体的方法有两个,map()flatmap()。map() 方法要传入一个内部类Func1的实例,它接受的两个参数分别为接受的对象类型和返回的,即转换后的对象类型。map()方法只是一对一的转换,而’flatmap()’方法则是一对多的转换,例如一个学生Student,她有其他类的实例作为其属性,例如课程Course,此时只需在创建观察者时声明要处理的是Course的对象,然后由被观察者调用’flatmap()’方法将Student对象转换成Course的对象。但需要注意,和 map() 不同的是, flatMap() 中返回的是个 Observable 对象,并且这个 Observable 对象并不是被直接发送到了 Subscriber 的回调方法中。 flatMap() 的原理是这样的:1. 使用传入的事件对象创建一个 Observable 对象;2. 并不发送这个 Observable, 而是将它激活,于是它开始发送事件;3. 每一个创建出来的 Observable 发送的事件,都被汇入同一个 Observable ,而这个 Observable 负责将这些事件统一交给 Subscriber 的回调方法。这三个步骤,把事件拆成了两级,通过一组新创建的 Observable 将初始的对象『铺平』之后通过统一路径分发了下去。而这个『铺平』就是 flatMap() 所谓的 flat。

RxJava用在哪?


1.与Retrofit结合。


博主目前还在学习,具体细节待补充,有什么不对的地方欢迎指正,谢谢!

1 0
原创粉丝点击