RxJava笔记 Subject

一、AsyncSubject
Observer会接收AsyncSubject的onComplete()之前的最后一个数据。

 AsyncSubject<String> asyncSubject = AsyncSubject.create();

        asyncSubject.onNext("asyncSubject1");
        asyncSubject.onNext("asyncSubject2");
        asyncSubject.onComplete();

        asyncSubject.subscribe(s -> System.out.println("asyncSubject: " + s));

结果:

asyncSubject: asyncSubject2

二、BehaviorSubject
Observer会先接收到 BehaviorSubject被订阅之前的最后一个数据, 再接收订阅之后发射过 来的数据。

 BehaviorSubject<String> behaviorSubject = BehaviorSubject.create();
        behaviorSubject.onNext("behaviorSubject1");
        behaviorSubject.onNext("behaviorSubject2");

        behaviorSubject.subscribe(s -> System.out.println("behaviorSubject: " + s));

        behaviorSubject.onNext("behaviorSubject3");
        behaviorSubject.onNext("behaviorSubject4");
        behaviorSubject.onComplete();

结果:

behaviorSubject: behaviorSubject2
behaviorSubject: behaviorSubject3
behaviorSubject: behaviorSubject4

三、ReplaySubject
ReplaySubject 会发射所有来自原始 Observable 的数据 给观察者,无论它 们 是何时订阅的。

 ReplaySubject<String> replaySubject = ReplaySubject.create();
        replaySubject.onNext("replaySubject1");
        replaySubject.onNext("replaySubject2");

        replaySubject.subscribe(s -> System.out.println("replaySubject: " + s));

        replaySubject.onNext("replaySubject3");
        replaySubject.onNext("replaySubject4");
        replaySubject.onComplete();

结果:

replaySubject: replaySubject1
replaySubject: replaySubject2
replaySubject: replaySubject3
replaySubject: replaySubject4

四、PublishSubject
Observer 只接收 PublishSubject 被订阅之后发送的数据。

 PublishSubject<String> publishSubject = PublishSubject.create();
        publishSubject.onNext("publishSubject1");
        publishSubject.onNext("publishSubject2");

        publishSubject.subscribe(s -> System.out.println("publishSubject" + s));

        publishSubject.onNext("publishSubject3");
        publishSubject.onNext("publishSubject4");
        publishSubject.onComplete();

结果:

publishSubjectpublishSubject3
publishSubjectpublishSubject4

五、总结
AsyncSubject:不论订阅发生在什么时候,只发射最后一个数据。
BehaviorSubject:发送订阅之前的一个数据和订阅之后的全部数据。
ReplaySubject:不论订阅发生在什么时候,都发射全部数据。
PublishSubject:发送订阅之后全部数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容