我正在尝试理解以下问题的黄金法则(如果有):
何时使用 BehaviorSubject?
和
何时使用 PublishSubject?
它们之间的区别非常明显。
有许多种类型的 subjects。对于这个具体的要求,PublishSubject 很适合,因为我们希望从上次离开的地方继续这个序列。所以假设事件 1、2、3 在 (B) 中被发送,那么在 (A) 再次连接后,我们只想看到 4、5、6。如果我们使用 ReplaySubject,我们会看到 [1, 2, 3],4,5,6;或者如果我们使用 BehaviorSubject,则会看到 3,4,5,6 等。(来源:如何思考 RxJava 中的 Subjects(第一部分))
我发现 Subject
在两个上下文中被使用(至少),UI 上下文和监听器上下文。
- UI 上下文(MVVM 作为例子)
例如,在这里使用了一个 BehaviorSubject
,很明显为什么使用了 Subject
而不是 Observable
,但我把 BehaviorSubject
改成了 PublishSubject
,但应用程序的行为仍然相同。
- 监听器上下文
为什么他们将project 字段设为 BehaviorSubject
而不是 PublishSubject
?