Rxjava 总结的比较

一.gradle的配置
 compile 'io.reactivex.rxjava2:rxjava:2.0.1'
 compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
二.本文章把 Observable、Flowable、Competaable、Singlable….被观察者看出上游,subscribe(xxx),xxx观察者看成下游;

image

如图:上下游通过subscribe连接起来,这样就是一个基本的rxjava的结构

三.XXXXXEmitter

Emitter就是发送器的提示
在:

//创建上游被观察者的最基础方式
xxx.create(emitter->{
    emitter.onNext();
    emitter.onNext();
    emitter.complete();
    emitter.error();
})

发射器(emitter)就是就是把上游的事件发射给下游

四.Disposable

翻译:一次性,可抛弃的

其实就是下游观察者返回的其中一个参数,他可以使用dispose()方法终止上下游连接
也可以当成是切断了水管,不过就算你切断了下游的水管,上游依然会执行

四.线程的调度
4.1 切换线程使用的函数
函数名字说明
subscribeOn只能第一次生效
oberveOn每次都生效,线程的切换
4.2 线程的枚举与效果
线程名称说明
Schedules.newThread()新线程
Schedule.IOio操作的线程
Schedule.computaioncpu计算多的线程
AndroidSchedule.mainThread()安卓主线程
4.3 RxJava 内置了一个容器ComposuteDisposable 可以通过add()放置disposable,通过可以在销毁的时候使用clear的方法切除所有上游的开关
五.Map: rxjava中变换操作符,就上游的事件作出转换

注意: 所有的xxMap 方法都带有”转变”的意思

六.操作符:flapMap与concatMap

两者都是可以将上游的事件,经过flapMap或者concatMap 变换成新的事件

实例:注册后的结果,做完登录的参数,继续进行

两者的差别:flatMap 对于onNext转变过来的事件是无序的,而后者是有序的

七:操作符Zip : 就是多个obserble 发送的事件结合在一起:

与六的操作符不过,flapMap和concatMap是有前后次序,而zip是并列打包一起的

注意点一:打包的事件按照zip打包事件中onNext最少的计算;

注意点二:关于上游事件的执行顺序问题:
1.同一线程,先别前面的事件缓存在队列,然后再遍历合并
2.不同的线程,分别取出后合并

注意点三:在不同线程的时候,当一个执行了complate,所有的上游事件都会停止执行

实践:
取出多个同学的信息然后组成表

八.backpressure:背压

所有的Backpressure其实就是为了控制流量,避免上游过多的请求,造成OOM

8.1 同一线程中,上游直接给下游,不会oom
8.2 不同线程中,由于异步,需要把上游的请求发送队列中,下游来不及处理就操作oom
8.3 出现的问题
Q:如何避免OOM
A:以下方式
  • 8.3.1 使用filter过滤,过滤上游的事件
  • 8.3.2 使用sample(2,TimeUnit)方法降低发送的频率
  • 8.3.3 上游降低发送事件的速度
九.Flowable

其实就是Observable 的升级麻烦版

9.1 在下游把disposable -> Subscription
该方法增添了request方法,用于增加下游处理事件的能力

在用一个线程的时候,BackpressureStrategy是什么都没问题
当不同线程的时候,直接抛MissingbacjpressureException
是因为下游的subscription默认没有request能力
可以使用subscription.request(Long.valueMax())方法给予

9.2 在create 方法中增添了BackpressureStrategy

使用Flowable的时候上下游不均衡的时候发送MissingBackpressureException

枚举类型发送上下游不均衡是的策略
BackpressureStrategy.ERROR直接抛异常
BackpressureStrategy.BUFFER上游无限队列,而默认上游是128个
BackpressureStrategy.DROP下游不接受,直接丢弃
BackpressureStrategy.LATEST下游不接受,直接丢弃,保留最后一个

我们需要

  • onBackpressureBuffer()
  • onBackpressureDrop()
  • onBackpressurelast()

指定策略

  • 9.3 使用Flowable.xxxx(): 如:interval方法创建flowable事件的时候
    为报missingbackpressureexception
十.关于Subscription 与FlowableEmitter

FlowableEmitter#requested():可以获得下游的处理能力

Subscription#request(xx):可以增加处理的能力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值