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
来源:oschina
链接:https://my.oschina.net/u/2277632/blog/1632909