前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJava零碎知识摘录(二)

RxJava零碎知识摘录(二)

作者头像
木溪bo
发布2019-08-24 18:51:18
5720
发布2019-08-24 18:51:18
举报

——》个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主精华、书籍

各自的职责:Retrofit 负责请求的数据和请求的结果,使用接口的方式呈现;OkHttp 负责请求的过程;RxJava 负责异步,各种线程之间的切换。

水管式的RxJava2.0——给初学者的RxJava2.0教程

1.在RxJava中分为被观察者(Observable),观察者(Observer),订阅(subscribe)。在Observable中ObservableEmitter发射器可以发送多条onNext()信息,在Observer中也可以接收多条,but在Observable中ObservableEmitter发射器发送多个onComplete或onError后,在Observer中只可以接收一条消息。且onComplete或onError只能同时存在一个或者说只会走一个。

  • 如果自定义多个Observable使用在concat操作符中,如果要想执行下一个Observable那么前一个Obeservable的发射器必须要执行onComplete方法。
  • concat中所有的Observable都要走完onComplete方法,不然 subscribe中的onComplete将不会执行。
  • 自定义observable中onComplete / onError方法后的onNext会发送 但是subscribe并不会接收到。

2.subscribeOn() 指定的是上游发送事件的线程, observeOn() 指定的是下游接收事件的线程。上游可以指定了多次线程, 但只有第一次指定的有效,而下游接收事件每指定一次线程都会切换一次。

3.最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete,也不能发多个onError,如果你的代码逻辑中违背了这个规则, 并不一定会导致程序崩溃 比如发送多个onComplete是可以正常运行的, 依然是收到第一个onComplete就不再接收了, 但若是发送多个onError, 则收到第二个onError事件会导致程序会崩溃.。

  • 经试验
 e.onNext(response);
 e.onError(new AndroidException("error"));
 e.onComplete();
 先调用onError()->onComplete()程序正常
 e.onNext(response);
 e.onComplete();
 e.onError(new AndroidException("error"));
 先调用onComplete()->onError()程序异常报错
  • 发多个onError是不允许的,会异常报错。
 e.onNext(response);
 e.onError(new AndroidException("error1"));
 e.onError(new AndroidException("error2"));
 程序异常报错

4.当使用Flowable来实现背压: Observable(上游 被观察者)和Observer(下游 观察者)—变成—>Flowable(上游 被观察者)和Subscriber(下游 观察者)

  • Flowable里默认有一个大小为128的水缸(即队列), 当上下游工作在不同的线程中时, 上游就会先把事件发送到这个水缸中。只有下游Subscriber中调用了Subscription.request(n),上游才会从队列中取出事件发送到下游,否则上游Flowable会认为下游没有处理能力就不会发射事件。而但上下游处在同一线程,却又没有处理能力时硬要调用e.onNext发射事件就会抛出MissingBackpressureException异常。
  • Subscription.request(n)当做是一种能力, 当成下游处理事件的能力, 下游能处理几个就告诉上游我要几个。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档