首页 > 解决方案 > 当订阅者处置时,Observable 应该调用 .onComplete() 吗?

问题描述

我正在编写一个 Observable 来处理与 Android 服务的连接,以RxAndroidBle's为模型.establishConnection()

我知道.establishConnection()从不打电话.onComplete();在它发出连接后,它要么由订阅者处置,要么以错误结束(通常是在连接丢失的情况下)。.onComplete()但是在处理连接时调用它似乎是合理的。我还没有找到这方面的官方RxJava政策;似乎有些 Observables 做到了,而另一些则没有。发出单个项目然后被处置的 Observable 的正确行为是什么?

标签: androidobservablerx-java2rxandroidble

解决方案


发出单个项目然后被处置的 Observable 的正确行为是什么?

如果我理解正确,这是一个关于Observable根据官方反应政策处置时应该如何表现的问题。实际上,调用/不调用.onComplete()when 处理都与Observable's 合同一致,但后者似乎是首选(加粗我的):

可观察到的终止

Observable 可以在 Observable 收到观察者的订阅通知后立即开始向观察者发出通知。

当观察者向 Observable 发出取消订阅通知时,Observable 将尝试停止向观察者发出通知。但是,不能保证 Observable 在观察者发出取消订阅通知后不会向观察者发出任何通知。

当 Observable 向其观察者发出 OnError 或 OnComplete 通知时,这将结束订阅。观察者不需要发出取消订阅通知来结束由 Observable 以这种方式结束的订阅。

通知在哪里:

Observer

  • OnNext
  • OnCompleted
  • OnError
  • OnSubscribe(可选的)

ObservableSource

  • Subscribe
  • Unsubscribe
  • Request(可选的)

推荐阅读