RxJava学习笔记
1.观察者模式
学习RxJava之前,必须要理解观察者模式。
举个例子,你去华为体验店去买mate20,发现没有现货,店员也不知道啥时来货,这样你就需要经常去看看是不是有货,去的时间约频繁,占用时间越短,越能及时买到这部手机,这类似于软件里面的轮询,间隔时间越短,资源耗费越多,对于状态改变的反应也就越及时;
如果换个思路,你第一次去的时候给店员留下你的电话号码,告诉他,如果来货了第一时间告诉你,那么你就可以继续做其他事情,等到手机到货了,你第一时间知道后就可以买到手机了,这就是观察者模式:观察者告诉被观察者,我给你我的对象(联系方式),你某个状态\数据改变了,及时给我发个事件(电话\短信),我来处理。
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
在RxJava中,与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
RxJava 的观察者模式大致如下图:
![](https://img.haomeiwen.com/i16572065/d920b94dcfa7e4d5.jpg)