各种RxJava2流(Single
,Maybe
等-我将它们称为Xxx
)具有静态方法.create( XxxOnSubscribe onSubscribe )
。传递的XxxOnSubscribe
对象应该实现方法void subscribe( XxxEmitter emitter )
。
Emitter
看起来像Observer
,但有一些区别(它并不是Observer
的扩展):
.subscribe()
方法返回void
而不是Disposable
.onSubscribe()
方法(该方法返回Disposable
).setCancellable()
,.setDisposable()
,.isDisposed()
和.tryOnError()
。 文档说:“当下游取消流量或事件生成器逻辑调用onSuccess(Object)
,onError(Throwable)
,{{1}之后,发射器实现将处置/取消此实例(哪个实例?) }或onComplete()
成功。”
我对此有疑问:
tryOnError(Throwable)
和Xxx
返回Observer
的{{1}}创建一个.subscribe()
? Disposable
从.onSubscribe()
中淘汰? Emitter
的理由是什么? Emitter
和Cancellable
? Disposable
对您有什么帮助? 此方案是否有更完整的说明?
(可能相关:我的Android应用似乎正在遇到.tryOnError()
运算符的某些奇怪行为。.retry()
是否在尝试重新订阅之前在上游调用.retry()
?)
答案 0 :(得分:0)
什么实例?
从preceding sentence in the docs的上下文中应该很清楚:
发射器允许分别通过
Disposable
或Cancellable
以setDisposable(Disposable)
或setCancellable(Cancellable)
的形式注册单个资源。当下游取消流或在事件生成器逻辑调用onSuccess(Object)
,Emitter.onError(Throwable)
,Emitter.onComplete()
之后或tryOnError(Throwable)
成功时,发射器实现将处置/取消此实例。 >
Disposable
或Cancellable
的实例。
为什么不能使用普通观察者创建Xxx
我们不希望用户调用onSubscribe
方法,因为它在运算符中没有用。我们无法隐藏方法,因此我们仅使用受支持的方法设计了单独的接口。
带有.subscribe()返回一次性的东西吗?
由于所谓的同步取消问题。如果您的方法由于某种原因从未返回,则无法返回Disposable
,并且下游无法取消该流程。
为什么.onSubscribe()从发射器中删除
没有理由调用它,因为操作员将在调用发射器实现的Observer.onSubscribe
方法之前为您处理对下游subscribe
的调用。
要求发射器的理由是什么?
API设计。我们提供了一组清晰的方法,可以调用这些方法,而无需暴露那些本该不该起作用的方法。
什么时候使用可取消与一次性?
请阅读javadoc和签名。使用最方便的方式来满足您的资源取消需求。
添加.tryOnError()有什么帮助?
请阅读javadoc。
此方案是否有更详尽的说明?
请使用各种方法javadocs查看每个示例。
.retry()是否在尝试重新订阅之前在上游调用.dispose()?
理论上,在收到错误时无需调用dispose
,但是当前实现可以执行此操作。我必须考虑是否需要在RxJava中进行更改。