了解 RxJava 基础知识

Understanding RxJava basics

我刚刚开始使用 RxJava,利用这个 tutorial。我了解 ObservableSubscriber 是什么。但是我对 "connecting" 他们有疑问。我只是想过这样一个任务:Activity A 启动 Activity B。Activity B 有一个按钮,您可以使用该按钮创建包含当前日期的 Date。另一个按钮发出此 Date 并完成 Activity B。 Activity A 订阅发出的 Date-Observable 并显示当前日期。 (我知道这通常是通过使用 Activity 结果来完成的)。我有以下问题:

我可以通过这段代码在 Activity B 中创建一个 Date-Observable(实例 mDate 的类型为 Date 并在 Activity B 中的其他地方创建):

Observable<Date> dateObservable =
            Observable.create(sub -> {
        sub.onNext(mDate);
        sub.onCompleted();
    });

但是在ActivityA我必须订阅它。但是我没有参考 Activity B 中的 Observable。我考虑过在我的 Application class 中静态创建 Observable 但我不知道 mDate 的值然而。我可以在不实现 "call()"-Method(调用 onNext()onCompleted() 的地方)的情况下以某种方式创建某种类型的 Observable 吗?那么我已经有了一个可以在 Aativity.And 中订阅的 Observable 实例,然后我可以在 Activity B 中实现 "call()"-Method?或者还有其他 RxJava 功能可以用来实现我描述的目标吗?

你需要一个叫做 ReplaySubject 的东西。

在你的习惯中 MyApplication class:

ReplaySubject<Date> dateSubject = ReplaySubject.create();

在activity B:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject();
subject.onNext(mDate);
subject.onCompleted();

在activity答:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject();
subject.subscribe(...);