为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2021-11-24 20:14:11
各种RxJava2流(Single,Maybe等等-我把它们称为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()上游?)
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

什么实例?

文档中上一句的上下文中应该可以清楚地看到:

发射器允许以 aDisposableCancellableviasetDisposable(Disposable)setCancellable(Cancellable)分别的形式注册单个资源。发射器实现将处置/当下游取消流或事件生成逻辑来电之后取消这种情况下onSuccess(Object)Emitter.onError(Throwable)Emitter.onComplete()或当tryOnError(Throwable)成功。

aDisposable或的实例Cancellable

为什么不能用普通的观察者创建 Xxx

我们不希望用户调用该onSubscribe方法,因为它在运算符中没有用处。我们无法隐藏方法,因此我们设计了一个单独的界面,其中仅包含受支持的方法。

.subscribe() 返回一次性?

因为所谓的同步取消问题。如果您的方法由于某种原因永远不会返回,则它无法返回 aDisposable并且下游无法取消流。

为什么 .onSubscribe() 从 Emitter 中被淘汰

没有理由调用它,因为操作员会在调用发射器实现Observer.onSubscribesubscribe方法之前为您处理对下游的调用。

需要发射器的理由是什么?

API 设计。我们提供了一组清晰的方法,可以在不暴露任何不应该或不会工作的方法的情况下调用这些方法。

你什么时候会使用可取消和一次性?

请阅读javadoc和签名。使用适合您的资源取消需求的任何一种。

添加 .tryOnError() 有什么帮助?

请阅读javadoc

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

请参阅各种方法javadocs中的每个示例。

.retry() 是否在尝试重新订阅之前调用 .dispose() 上游?

理论上,dispose当收到错误时不需要调用,但当前的实现可能会这样做。我必须考虑这是否需要在 RxJava 中改变。


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信