RxJava 学习笔记<二> subject

十年热恋 提交于 2020-02-28 22:55:38

Subjects 是一个继承了 Observable 和实现 Observer 的接口,咋看之下看起来有点奇怪,但是在很多情况可以让代码写起来简单。

Subjects的实现有很多,我们可以看几个例子,了解他们的不同之处

PublishSubject

PublishSubject的操作是最直截了当的,当一个值被推到 PublishSubject中,这个 subject 就会把数据给到每个 subscriber,1 没有输出是因为在他 push 的时候没有 subscribed

输出:

ReplaySubject

ReplaySubject有一个缓存所有推向它数据的特性,当一个新的subscription建立,时间流将会重新开始推向subscriber,之后的就像 PublishSubject 实现一样。在看ReplaySubject的第二个例子可以知道,缓存所有的不是一个好主意,这样 observable 序列会执行很长时间,我们可以使用 ReplaySubject.createWithSize 限制缓存的大小。在第三个例子中可以看出使用 ReplaySubject.createWithTime 限制缓存的时间。

输出:

BehaviorSubject

BehaviorSubject仅仅保留最后一个值,类似于 ReplaySubject 设置缓存一个,当创建的时候,subscription会执行。第二个例子,执行 onCompleted()方法,这是最后一个事件。第三个例子展示可以设置初始值。

日志输出:

AsyncSubject

AsyncSubject 也可以缓存最后一个值,区别是在 sequence  完成之前不会输出任何值。

日志输出:

原文地址:

https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%201%20-%20Getting%20Started/2.%20Key%20types.md

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!