RxJava概述

RxJava概述

Posted by candy1126xx on July 17, 2017

解决什么问题

解决回调地狱问题。 回调地狱往往出现在观察者模式和异步编程中,所以RxJava给出在这两种场景中,以链式编程代替多重回调嵌套的解决方案。

架构

基于四个基础接口:Publisher、Subscriber、Subscription、Processor Observable ( 被观察者 ) / Observer ( 观察者 ) 不支持背压 Flowable (被观察者)/ Subscriber (观察者)支持背压 ObservableEmmiter,发射器,重写subscribe()定义发送的事件以及发送事件前执行的任务

观察者模式

分三步: 1、创建事件发送者Publisher,定义发送的事件以及发送事件前执行的任务; 2、创建观察者Subscriber,定义接到事件后的相应动作 3、建立订阅关系subscribe()。

异步

Scheduler调度器,它可以指定在哪个线程发送的事件,在哪个线程执行相应动作。

操作符

map

功能

map 操作符可以将一个 Observable 对象通过某种关系转换为另一个Observable 对象。

场景

把网络请求返回的Response对象中的Json字符串转换为Java对象

concat

功能

concat 可以做到不交错的发射两个甚至多个 Observable 的发射事件,并且只有前一个 Observable 终止(onComplete) 后才会订阅下一个 Observable。

场景

利用 concat 的必须调用 onComplete 后才能订阅下一个 Observable 的特性,我们就可以先读取缓存数据,倘若获取到的缓存数据不是我们想要的,再调用 onComplete() 以执行获取网络数据的 Observable,如果缓存数据能应我们所需,则直接调用 onNext(),防止过度的网络请求,浪费用户的流量。

flatMap

功能

flatMap 操作符可以将一个发射数据的 Observable 变换为多个 Observables ,然后将它们发射的数据合并后放到一个单独的 Observable

场景

用户注册成功后需要自动登录,我们只需要先通过注册接口注册用户信息,注册成功后马上调用登录接口进行自动登录即可。

zip

功能

zip 操作符可以将多个 Observable 的数据结合为一个数据源再发射出去。

场景

在一个页面显示的数据来源于多个接口

interval

功能

实现心跳间隔任务

场景

轮训