RxJava2中有许多订阅者的单个异步事件

时间:2016-11-28 13:42:09

标签: android rx-java reactive-programming observable rx-java2

我有一个处理图像的类,这可能是一个缓慢的过程。完成工作后,该类包含有关图像的一些功能,如主色。

我还有很多其他想要知道主色的代码,当他们提出要求时,它可能已经准备就绪,也可能没有准备好。

我还没有找到一种使用RxJava2实现此功能的简单方法。有人能帮助我吗?

总而言之,如果我能创建一个方法:

,那就太好了
  1. 允许多个订阅者致电/订阅。
  2. 处理完成后,订阅者会收到结果。
  3. 订阅者会自动取消订阅以避免内存泄漏。没有第二个事件,也没有理由继续订阅。
  4. 稍后订阅/调用该方法的订阅者只获取缓存的值。
  5. ReplaySubject似乎有一些我正在寻找的属性,但我不确定如何正确实现它。

1 个答案:

答案 0 :(得分:0)

  

“1。允许多个订阅者呼叫/订阅。
  “4。订阅/稍后调用该方法的订阅者只获取缓存的值。

replay(1)autoConnect()结合使用。这将导致一个observable共享对源的单个订阅,并重放源发出的最后一个值。 autoConnect()确保在第一个订阅者订阅时直接订阅源。

  
      
  1. 处理完成后,订阅者会收到结果。
  2.   

使用Observable.create()并使用ObservableEmitter发出结果。

  
      
  1. 订阅者会自动取消订阅以避免内存泄漏。没有第二个事件,也没有理由继续订阅。
  2.   

Observable转换为Single

以下内容应该有效:

Observable.create(new ObservableOnSubscribe<String>() {
  @Override
  public void subscribe(final ObservableEmitter<String> e) throws Exception {
    Thread.sleep(5000);
    e.onNext("Test");
    e.onComplete();
  }
}).replay(1).autoConnect()
    .firstOrError();

请注意,您应该保留对此ObservablefirstOrError()的结果)的引用,并与订阅者共享该实例。