RxJava学习笔记

思想:响应式编程,事件流编程,可读性高,扩展性高,维护性

ObservableEmitter    发射器

dispose()         并不会导致上游不再继续发送事件, 上游会继续发送剩余的事件.下游不在接收

subscribeOn()     指定的是上游发送事件的线程,第一次有效

 observeOn()     指定的是下游接收事件的线程.最后一次有效

RxJava中已经内置了一个容器CompositeDisposable【使用的是数组】, 每当我们得到一个Disposable时就调用CompositeDisposable.add()将它添加到容器中, 在退出的时候, 调用CompositeDisposable.clear()即可切断所有的水管


创建操作符

create  直接创建操作符

just  将参数传递到观察者钟(将数据发送到主线程钟执行,读取文件等操作)

fromArray  将数组等发送到观察者(代替for循环)

empty 上游不发送任何事件,只支持object泛型,只能接受到onComple事件(用于在子线程中获取数据)

range 递归添加数( range(1,8)类似于从1发送到8)

变换操作符

map  变换,将原始数据进行一个变换,继续传递到观察者, 需要一个function(通过一个地址,在map中转换成文件,然后传递到观察者,读取文件)

flatMap  再次发射,将创建得资源,重新创建一个被观察者,然后再将新的被观察者发送到观察者(不排序)

concatMap  排序得flatMap,类似于function中所有得return每次只要等上一个被观察者执行完之后才会执行下一个

groupBy 类似于过滤,把不同的数据进行分组

Buffer  分次进行处理,  buffer(10)  等于先处理十个 数据 然后在处理十个

过滤操作符

filter 过滤操作符,是否过滤 true/false

take 定时器[interval]得基础上添加  take(8)  等于执行8次

distinct 过滤掉重复的操作,值相同被过滤

elementAt 指定输出某个下标,找不到得情况下输出默认

条件型操作符(最终结果为Boolean类型)

all 判断数据中是否存在某个数等【类似于 if 得操作】判断为true才到观察者中去

contain 是否包含 【contain("123")】

isEmpty

any    和 all 相反,全部为true才会发送true【类似于if中得&&】

合并型操作符(两个或者多个被观察者合并)

startWith 执行两个被观察者,先执行startWith中的参数的那个被观察者

concatWith 跟startWith是相反

concat 最多存四个被观察者,多个被观察者合并成一个被观察者,按顺序执行【一个被观察者执行完后在下一个】

merge 跟concat一样,但是不按顺序,并列执行【】

zip 将多个被观察者自定义合并数据(最多9个),两个被观察者的数据是要对应,多了的会被忽略

异常处理操作符

onErrReturn 拦截异常,返回指定数据然后继续到观察者并中断后续的事件,(使用throw会崩溃,需要使用e.onError();作用在onErrorReturn中处理异常,可以返回指定的值

onErrorResumeReturn 在拦截中onErrorResumeReturn可以重新创建一个被观察者,继续发送数据到观察者

onExceptionResumeReturn 可以拦截throw抛出的异常,然后接受到异常继续发送事件

retry 在retry中返回false代表不重试,true为一直重试【重新执行全部】(设置次数的时候,会执行一次。重试次数)

线程切换

subscribeOn 被观察者使用的线程【只是第一次设置有效】

onserveOn 观察者使用的线程【每设置一次,切换一次】

    schedulers.io(),schedulers.newThread (),AndroidSchedulers.mainThread()

同步跟异步执行的区别

同步是一次执行,一次通知被观察者,异步是同时进行,谁先耗时操作完谁谁先通知被观察者

背压(2.0增加的,Flowable)

  上游不停的发射,下游处理不过来,

被压策略

Buffer 处理不过来,放入缓存区【128个】,缓存满了,等待

Error 处理不过来,放入缓存区,缓存区满了,抛异常

Drop 处理不过来,放入缓存区,缓存区满了,后面发射的事件丢弃

Latest 处理不过来,放入缓存区,缓存区满了,只存储128个事件

同步的时候,s.request的时候没反应

异步的时候,s.request(10);可以执行10个事件

泛型

可读不可写模式

List list;

不能 list.add(new Preson)

可以Person =list.get(0)

可写不可以写模式

List list;

可以 list.add(new Preson)

可以Object=list.get(0)

使用例子

zip 一个界面需要展示用户的一些信息, 而这些信息分别要从两个服务器接口中获取, 而只有当两个都获取到了之后才能进行展示

conectMap  先注册后登陆使用

背压解决办法

一是从数量上进行治理, 减少发送进水缸里的事件 使用Flowable

二是从速度上进行治理, 减缓事件发送进水缸的速度 上游延迟发送

你可能感兴趣的:(RxJava学习笔记)