gpt4 book ai didi

android - 了解数据流和多个订阅者(使用改造)

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:47 24 4
gpt4 key购买 nike

假设我有 2 个 Observable(A 和 B),它们本质上是网络调用(使用 Retrofit 提供上下文)。

应用当前流程如下:

  • A 和 B 几乎同时(异步)启动。
  • B 在用户交互中执行 0 次或多次

鉴于这 2 个可观察对象/api 调用,我有 3 种不同的场景需要监听。

  1. 我想立即知道 Observable A 何时完成
  2. 我想立即知道 Observable B 何时完成
  3. 我想知道两者何时完成

首先,这是 RxJava 的一个很好的用例吗?

我知道如何单独完成每个场景(最后使用 zip),但我不知道如何同时完成所有这些场景。

如果我订阅 Observable A,A 就开始了。如果我订阅 B,B 开始。如果 A 和 B 在我订阅 zip(a, b) 之前完成,我可能会错过该事件并且永远不会真正看到它完成,对吧?

任何一般指导将不胜感激。我的 RxJava 知识很薄:P

最佳答案

您可以使用三种不同的 Observable 来实现这一点,每种情况一个。

由于您必须在每个 observable 之间共享状态,因此您必须将改造冷 observable 转换为热 observable。 (有关此主题的更多信息,请参阅 here)

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

不要在 onCompleted 方法之间共享对象,否则您将不得不处理并发问题。

关于android - 了解数据流和多个订阅者(使用改造),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27390627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com