首页 > 解决方案 > 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 上下文和侦听器上下文。

例如,这里使用了 a BehaviorSubject,很清楚为什么他们使用Subject而不是Observable,但我已将其更改为BehaviorSubjectPublishSubject但应用程序的行为仍然相同。

为什么他们将项目领域设为 aBehaviorSubject而不是PublishSubject

标签: androidrx-javarx-swiftreactivex

解决方案


PublishSubject和之间的主要区别在于BehaviorSubject后者会记住最后发出的项目。因为BehaviorSubject当你想发出states

为什么他们将项目字段设为 BehaviorSubject 而不是 PublishSubject ?

可能是因为他们希望能够使用此方法检索最后发出的项目:

@Override public @NonNull Observable<Project> project() {
  return this.project;
}

推荐阅读