android - BehaviorSubject 与 PublishSubject
问题描述
我试图让我的头脑围绕以下黄金法则(如果有的话):
何时使用 BehaviorSubject ?
和
何时使用 PublishSubject ?
它们之间的区别非常明显
科目有很多种。对于这个特定的要求,PublishSubject 工作得很好,因为我们希望从它停止的地方继续序列。所以假设事件 1,2,3 在 (B) 中发出,在 (A) 连接回来后,我们只想看到 4, 5, 6。如果我们使用 ReplaySubject,我们会看到 [1, 2, 3], 4, 5、6;或者如果我们使用 BehaviorSubject,我们会看到 3、4、5、6 等。(来源:How to think about Subjects in RxJava (Part 1))
我已经看到Subject
's 在两个上下文中使用(至少),UI 上下文和侦听器上下文。
- UI 上下文(以 MVVM 为例)
例如,这里使用了 a BehaviorSubject
,很清楚为什么他们使用Subject
而不是Observable
,但我已将其更改为BehaviorSubject
,PublishSubject
但应用程序的行为仍然相同。
- 侦听器上下文
为什么他们将项目领域设为 aBehaviorSubject
而不是PublishSubject
?
解决方案
PublishSubject
和之间的主要区别在于BehaviorSubject
后者会记住最后发出的项目。因为BehaviorSubject
当你想发出states
.
为什么他们将项目字段设为 BehaviorSubject 而不是 PublishSubject ?
可能是因为他们希望能够使用此方法检索最后发出的项目:
@Override public @NonNull Observable<Project> project() {
return this.project;
}