了解 RxJava 基础知识

unl*_*101 5 android observable rx-java

我只是在使用 RxJava 做我的第一步,利用本教程。我明白什么是一个Observable,什么是一个Subscriber。但是我在“连接”它们时遇到了问题。我刚刚想到了这样一个任务:一个活动 A 启动一个活动 B。活动 B 有一个按钮,你可以用它创建一个Date包含当前日期的按钮。另一个按钮发出它Date并完成活动 B。活动 A 订阅发出的Date-Observable 并显示当前日期。(我知道这通常是通过使用活动结果来完成的)。我有以下问题:

我可以Date通过此代码在活动 B 中创建一个-Observable(实例 mDate 是类型Date并在活动 B 中的其他位置创建):

Observable<Date> dateObservable =
            Observable.create(sub -> {
        sub.onNext(mDate);
        sub.onCompleted();
    });
Run Code Online (Sandbox Code Playgroud)

但是在 Activity AI 中必须订阅它。但是我没有提到活动 B 中的 Observable。我想在我的Application班级中静态创建 Observable,但我还不知道它的价值mDate。我可以以某种方式创建某种类型的 Observable 而不实现“call()”-Method(在哪里onNext()onCompleted()被调用)?那么我已经有一个可以在我的 Aativity 中订阅的 Observable 实例。然后我可以在活动 B 中实现“call()”-Method?或者我可以使用其他 RxJava 特性来实现我描述的目标吗?

sat*_*iji 2

你需要一个叫做ReplaySubject.

在您的自定义MyApplication类中:

ReplaySubject<Date> dateSubject = ReplaySubject.create();
Run Code Online (Sandbox Code Playgroud)

在活动B中:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject();
subject.onNext(mDate);
subject.onCompleted();
Run Code Online (Sandbox Code Playgroud)

在活动A中:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject();
subject.subscribe(...);
Run Code Online (Sandbox Code Playgroud)