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())