Android 了解数据流和多个订户(使用改进)
假设我有两个观测值(A和B),它们本质上是网络调用(使用改装来提供上下文) 应用程序的当前流程如下所示:Android 了解数据流和多个订户(使用改进),android,retrofit,rx-java,rx-android,Android,Retrofit,Rx Java,Rx Android,假设我有两个观测值(A和B),它们本质上是网络调用(使用改装来提供上下文) 应用程序的当前流程如下所示: A和B大约同时启动(异步) B在用户交互时执行0次或更多次 我有3个不同的场景,在给定这2个可观察的/api调用的情况下,我想要监听它们 我想知道可观测A何时完成 我想知道可观测B何时完成 我想知道他们什么时候都完成了 首先,这是RxJava的一个好用例吗 我知道如何单独执行每个场景(最后使用zip),但我不知道如何同时执行所有场景 如果我同意可观测A,A开始。如果我订阅B,B开始。如果
- A和B大约同时启动(异步)
- B在用户交互时执行0次或更多次
zip
),但我不知道如何同时执行所有场景
如果我同意可观测A,A开始。如果我订阅B,B开始。如果A&B在我订阅zip(A,B)之前完成,我可能会错过活动,并且永远不会看到这个完成,对吗
如能提供一般性指导,将不胜感激。我的RxJava知识非常贫乏:P
您可以使用三种不同的可观察对象来实现这一点,每种情况一个
由于您必须在每个可观测对象之间共享状态,因此您必须将改造后的冷可观测对象转换为热可观测对象。(有关此主题的更多信息,请参阅)不要在未完成的方法之间共享对象,否则您将不得不处理并发性问题。太棒了,这真的很有帮助。您是否介意对我可能遇到的并发性问题进行一些扩展?如果我观察到它们都在同一条线上,这仍然是一个问题吗?我认为A或B将首先完成,然后是A+B。可观测A、可观测B和可观测ab(A和B的合并可观测)可以在不同的线程中完成。因此,对未完成方法的调用不能是顺序的(与rx合同相反)。您可以在未完成的方法中读取名为“hello”的共享变量。下一行,再次读取相同的变量。值可以改变,因为来自另一个可观察对象的另一个未完成方法可以改变它。
ConnectableObservable a = service.callA().publish();
ConnectableObservable b = service.callB().publish();
a.subscribe((e) -> { /* onNext */ }, (ex) -> {/* onError */}, () -> {/* when A is completed */ });
b.subscribe((e) -> { /* onNext */ }, (ex) -> {/* onError */}, () -> {/* when B is completed */ });
a.mergeWith(b).subscribe((e) -> { /* onNext */ }, (ex) -> {/* onError */}, () -> {/* when A and B are completed */ });
a.connect(); // start subscription to a
b.connect(); // start subscription to b