繁体   English   中英

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

[英]A single async event with many subscribers in RxJava2

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

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

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

总而言之,如果我能创建一个方法,那将是很好的:

  1. 允许多个订阅者进行呼叫/订阅。
  2. 处理完成后,订户收到结果。
  3. 订阅者将自动取消订阅以避免内存泄漏。 没有第二个事件,也没有理由继续订阅。
  4. 在稍后订阅/调用该方法的订阅者只获取缓存的值。

ReplaySubject似乎有一些我正在寻找的属性,但我不确定如何正确实现它。

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

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

  1. 处理完成后,订户收到结果。

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

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

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();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM