关于使用 .create() 创建 RxJava2 反应流的困惑

各种RxJava2流(SingleMaybe等等-我把它们称为Xxx)有一个静态方法.create( XxxOnSubscribe onSubscribe )XxxOnSubscribe传递的对象应该实现方法void subscribe( XxxEmitter emitter )

AnEmitter似乎类似于 anObserver但有一些不同(它不完全是 的扩展Observer):

  • 它的.subscribe()方法返回void而不是Disposable

  • 它缺少一个.onSubscribe()方法(返回 a Disposable

  • 它增加了一些方法.setCancellable().setDisposable().isDisposed(),和.tryOnError()

文档说“当下游取消流或在事件生成器逻辑调用之后或成功时onSuccess(Object),发射器实现将处置/取消此实例(什么实例?)。”onError(Throwable)onComplete()tryOnError(Throwable)

我对此的问题包括:

  • 为什么不能用返回 aXxx的法线创建?Observer.subscribe()Disposable

  • 为什么被.onSubscribe()淘汰Emitter

  • 要求一个的理由是Emitter什么?

  • 你什么时候使用 aCancellable和 a Disposable

  • .tryOnError()帮助东西的添加如何?

是否有对该方案的更全面的解释?

(可能相关:我的 Android 应用程序似乎遇到了.retry()运营商的一些奇怪行为。在尝试重新订阅之前是否.retry()调用.dispose()上游?)


拉莫斯之舞
浏览 226回答 1
1回答

慕桂英3389331

什么实例?从文档中上一句的上下文中应该可以清楚地看到:发射器允许以 aDisposable或CancellableviasetDisposable(Disposable)或setCancellable(Cancellable)分别的形式注册单个资源。发射器实现将处置/当下游取消流或事件生成逻辑来电之后取消这种情况下onSuccess(Object),Emitter.onError(Throwable),Emitter.onComplete()或当tryOnError(Throwable)成功。aDisposable或的实例Cancellable。为什么不能用普通的观察者创建 Xxx我们不希望用户调用该onSubscribe方法,因为它在运算符中没有用处。我们无法隐藏方法,因此我们设计了一个单独的界面,其中仅包含受支持的方法。.subscribe() 返回一次性?因为所谓的同步取消问题。如果您的方法由于某种原因永远不会返回,则它无法返回 aDisposable并且下游无法取消流。为什么 .onSubscribe() 从 Emitter 中被淘汰没有理由调用它,因为操作员会在调用发射器实现Observer.onSubscribe的subscribe方法之前为您处理对下游的调用。需要发射器的理由是什么?API 设计。我们提供了一组清晰的方法,可以在不暴露任何不应该或不会工作的方法的情况下调用这些方法。你什么时候会使用可取消和一次性?请阅读javadoc和签名。使用适合您的资源取消需求的任何一种。添加 .tryOnError() 有什么帮助?请阅读javadoc。是否有对该方案的更全面的解释?请参阅各种方法javadocs中的每个示例。.retry() 是否在尝试重新订阅之前调用 .dispose() 上游?理论上,dispose当收到错误时不需要调用,但当前的实现可能会这样做。我必须考虑这是否需要在 RxJava 中改变。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java