RxJava 主题:发布、重放、行为和异步主题

前言


本文是关于 RxJava 中可用的主题的全部内容。

  • 发布主题
  • 重播主题
  • 行为主体
  • 异步主题

让我们了解一下主题。

什么是主题?

Subject 是一种桥接器或代理,在 ReactiveX 的某些实现中可用,它既充当观察者又充当 Observable。因为它是一个观察者,它可以订阅一个或多个Observable,并且因为它是一个Observable,它可以通过重新发射它观察到的项目来传递它们,它也可以发射新的项目。

我相信:以身作则是最好的学习方式

发布主题

它在订阅时发出源 Observable 的所有后续项。

在这里,如果一个学生进入教室很晚,他只想从他进入教室的那个时间点开始听。因此,Publish将是这个用例的最佳选择。
请参见以下示例:

PublishSubject<Integer> source = PublishSubject.create();

// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver()); 

source.onNext(1);
source.onNext(2);
source.onNext(3);

// It will get 4 and onComplete for second observer also.
source.subscribe(getSecondObserver());

source.onNext(4);
source.onComplete();

重播主题

无论订阅者何时订阅,它都会发出源 Observable 的所有项目。

在这里,如果一个学生迟到了教室,他想从头开始听。所以,这里我们将使用Replay来实现这一点。

请参见以下示例:

ReplaySubject<Integer> source = ReplaySubject.create();
// It will get 1, 2, 3, 4
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
source.onNext(4);
source.onComplete();
// It will also get 1, 2, 3, 4 as we have used replay Subject
source.subscribe(getSecondObserver());

行为主体

当观察者订阅它时,它会发出最近发出的项目和源 Observable 的所有后续项目。

在这里,如果一个学生迟到了教室,他想听教授最近教的东西(而不是从一开始),以便他了解上下文。所以,这里我们将使用Behavior.

请参见以下示例:

BehaviorSubject<Integer> source = BehaviorSubject.create();
// It will get 1, 2, 3, 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will get 3(last emitted)and 4(subsequent item) and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();

异步主题

只有在源 Observable 完成后,它才会发出源 Observable 的最后一个值(并且只有最后一个值)。

在这里,如果一个学生在任何时候进入教室,并且他只想听课后教的最后一件事(也是最后一件事)。所以,这里我们将使用Async.

请参见以下示例:

AsyncSubject<Integer> source = AsyncSubject.create();
// It will get only 4 and onComplete
source.subscribe(getFirstObserver());
source.onNext(1);
source.onNext(2);
source.onNext(3);
// It will also get only get 4 and onComplete
source.subscribe(getSecondObserver());
source.onNext(4);
source.onComplete();

因此,每当您遇到这些类型的情况时,RxJava 主题将是您最好的朋友。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值