我正在尝试使用Hot Observable
和Hot Flowable
来了解Observable.range(1,1000).publish()
和Observable.interval(500, TimeUnit.MILLISECONDS).publish()
。
range()
而不是interval()
创建一个Observable / Flowable时,无需暂停Thread即可使主线程等待一会儿。在范围完成之前,Main()
不会退出。 interval()
函数不会发生同样的情况。range()
而不是interval()
创建一个Observable / Flowable时,我必须在connect()
之前先订阅Observer / Subscriber,否则就不会收到任何项目。使用interval()
一切都会按照我的预期进行。有人可以解释为什么会这样吗?是range()
的实现,还是我不了解某些内容?
您可以查看Observable / Observer here和Flowable / Subscriber here的示例。
答案 0 :(得分:1)
range()
运算符很冷,并尽快发射其所有项目。如果没有施加背压,则所有项目将在前几微秒内发射出去。
interval()
操作员很冷,并且随着时间的推移逐个发射其项目;在定义的时间间隔后发出第一项。如果您订阅了主线程,而主程序退出了,则您将看不到interval()
运算符的结果,因为还没有经过足够的时间。这意味着您要么必须阻塞观察者链,要么提供一种外部方法来等待所需的结果。