美文网首页
RxJava的Subject

RxJava的Subject

作者: Android流浪者 | 来源:发表于2019-08-24 12:16 被阅读0次

Subject即可以是一个Observer也可以是一个Observerable,它是连接Observer和Observable的桥梁。因此,Subject可以被理解为Subject = Observable + Observer。RxJava提供了以下4中Subject。
1.PublishSubject
 PublishSubject只会把在订阅发生的时候点之后来自原始Observable的数据发射给观察者。需要注意的是,PublishSubject可能会一个创建完成就立刻开始发射数据,因此这里会有一个风险:在Subject被创建后到有观察者订阅它之前这个时间段内,一个或多个数据可能会丢失。如果要确保来之原始Observable的所有数据都被分发,则可以当所有观察者都已经订阅时才开始发射数据,或者改用ReplaySubject。
2.BehaviorSubject
 当Observer订阅BehaviorSubject时,它开始发射原始Observable最近发生的数据。如果此时没有收到任何数据,它发射一个默认值,然后继续发射其它任何来自原始Observable的数据。如果原始的Obserable因为发生一个错误而终止,BehaviorSubject将不会发射任何数据,但是会向Observer传递一个异常通知。
3.ReplaySubject
不管Observer何时订阅ReplaySubject,ReplaySubject均会发射所有来之Observable的数据给Observer。有不同类型的ReplaySubject,它们用于限定Replay的范围,例如设定Buffer的具体大小,或者设定具体的时间范围。如果使用ReplaySubject作为Observer,注意不要在多个线程中调用onNext,onCompleted和onError发法。这可能会导致顺序错乱,并且违反了Observer规则。
4.AsyncSubject
当Observabel完成,AsyncSubject只会发射来自原始Observable的最后一个数据。如果原始Observable因为发生了错误而终止,AsyncSubject将不会发射任何数据,但是会向Observer传递一个通知。

相关文章

  • 理解RxJava Subject --Publish, Repl

    这篇文章将围绕RxJava中的Subject来展开。 Publish Subject Replay Subject...

  • RxJava:Subject

    他是一个桥梁 A Subject is a sort of bridge or proxy that is ava...

  • RxJava 的 Subject

    Subject 是一种特殊的存在 在前面一篇文章Cold Observable 和 Hot Observable中...

  • RxJava的Subject

    Subject即可以是一个Observer也可以是一个Observerable,它是连接Observer和Obse...

  • RxJava笔记 Subject

    一、AsyncSubjectObserver会接收AsyncSubject的onComplete()之前的最后一个...

  • RxJava:Subject介绍

    这篇文章写的内容是从资料上复制下来的。应该是RxJava的官方资料翻译过来的文件,忘记原出处了。 Subject ...

  • Android RxBus的使用

    RxBus的核心功能是基于Rxjava的,在RxJava中有个Subject类,它继承Observable类,同时...

  • RxJava 第二篇 - Subject使用及示例

    本文介绍RxJava中Subject的使用。小白同学们看清楚并记好了,这里讲的是Subject,不是Subscri...

  • RxJava备忘资源

    1.给 Android 开发者的 RxJava 详解 2.RxJava中常见的几种Subject 3. RxJav...

  • RXJava Subject详解 (RXJava Part 2)

    前面说过了RXJava中的Observable,本次来说说Subject。附上前文的链接。喜欢的兄弟麻烦点个喜欢,...

网友评论

      本文标题:RxJava的Subject

      本文链接:https://www.haomeiwen.com/subject/rfpfectx.html