Android OnSubscribe位置导致OnComplete事件提前触发
我对Android OnSubscribe位置导致OnComplete事件提前触发,android,rx-java,rx-android,Android,Rx Java,Rx Android,我对.subscribeOn()如何在RxJava上实际工作感到有点好奇。 我有一段代码可以按预期工作: return endpoints.getRecentConversations(page) .map().flatMap().doOnNext() //etc etc... .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.ma
.subscribeOn()
如何在RxJava
上实际工作感到有点好奇。
我有一段代码可以按预期工作:
return endpoints.getRecentConversations(page)
.map().flatMap().doOnNext() //etc etc...
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
我正在读这篇文章,试图理解subscribeOn
和observeOn
之间的区别,这时这句话引起了我的注意:
位置不重要
subscribeOn
可以放在流中的任何位置,因为它会影响
仅限订阅时间
听起来很好。但我觉得有点怀疑,我决定测试一下。因此我更改了上面的代码(切换了第2行和第3行):
因此,我在订阅服务器上收到一个过早的onComplete()
<代码>onNext()从未被调用,并且我的logcat中不存在任何错误
我可以让事情保持原样,但我想知道为什么会这样。位置不重要是真的吗?我的代码有问题吗 是的,这个职位在RxJava中非常重要,它被称为上游和下游 这是因为你订阅的是一个热门的可观测数据 观看此视频以更好地理解它:常见的RxJava错误 有两种类型的可观察物:热的和冷的 一个“热”的可观察物可能在创建后立即开始发射物品, 因此,任何后来订阅该可观察对象的观察者都可以开始 观察中间某处的序列。可观察到的“寒冷”, 另一方面,等待观测者在它之前订阅它 开始发射项目,因此这样的观察者保证能够看到 从一开始就是一个完整的序列
很好的演讲,值得一看,谢谢。但我并不是赞同一个热门的观察,而是冷淡地检查我的要点。Dan Lew在演讲中还说,订阅的顺序并不重要。observeOn是另一个故事让我来看看
return endpoints.getRecentConversations(page)
.subscribeOn(Schedulers.io())
.map().flatMap().doOnNext() //etc etc...
.observeOn(AndroidSchedulers.mainThread())