Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rx java 为什么在重播()之前调用publish()很重要_Rx Java_Reactive Programming_Rx Android_Rx Java2 - Fatal编程技术网

Rx java 为什么在重播()之前调用publish()很重要

Rx java 为什么在重播()之前调用publish()很重要,rx-java,reactive-programming,rx-android,rx-java2,Rx Java,Reactive Programming,Rx Android,Rx Java2,我已经阅读了许多关于publish()和replay()的rx示例。在所有教程中,他们都说在调用replay()之前调用publish()非常重要。为什么会这样?如果调用replay()而从不调用publish(),会发生什么情况?似乎replay()操作符将订阅源可观察对象并开始缓存。然后,任何人都会得到相同的、完整的数据流。我能看到publish()改变游戏的唯一原因是它会延迟对源observable的订阅,直到调用connect()为止。这是对的吗?您通常会应用其中一个,但不能同时应用这两

我已经阅读了许多关于publish()和replay()的rx示例。在所有教程中,他们都说在调用replay()之前调用publish()非常重要。为什么会这样?如果调用replay()而从不调用publish(),会发生什么情况?似乎replay()操作符将订阅源可观察对象并开始缓存。然后,任何人都会得到相同的、完整的数据流。我能看到publish()改变游戏的唯一原因是它会延迟对源observable的订阅,直到调用connect()为止。这是对的吗?

您通常会应用其中一个,但不能同时应用这两个,因为
publish().replay()
与普通的
replay()
replay()没有实际区别。publish()
只是后期消费者看不到整个序列的方法

在所有教程中,他们都说在调用replay()之前调用publish()非常重要

这肯定是错的,你到底在哪里读到的

是这样吗

两个操作符都返回一个
ConnectableObservable
,在这两种情况下,您必须调用
connect
,才能开始序列。在这两种情况下,您都应该在调用connect之前准备使用者,或者使用
autoConnect(n)
n
使用者之后启动序列


publish
replay
之间的区别在于后者会缓存部分或全部项目,并将其重播给消费者,无论他们何时订阅。前者不保留任何项目,甚至不保留最新的项目,如
行为主题
,并将项目发送给当时订阅的消费者。

你能发布到“许多rx示例”的链接吗?这是一个,但也在我阅读声明的书中“如果在将可观察对象转换为可连接的可观察对象之前对其应用Replay操作符,则生成的可连接的可观察对象将始终向任何未来的观察者发射相同的完整序列,即使是在可连接的可观察对象开始向其他已订阅的观察者发射项目之后订阅的观察者也是如此。“这让我很困惑。这对我来说毫无意义。这意味着无论何时订阅,每个人都会获得完整的流媒体。但我想我们无论如何都会得到的,即使我们不打电话给publish。我感谢你迄今为止的所有帮助。我仍然停留在
replay()
replay().publish()之间的差异上。这两种方法的区别是什么?Replay将缓存项目,然后
publish
将在消费缓存时向其消费者发送部分内容,从而取消
Replay()
向所有人重播相同项目的功能,无论他们何时开始消费。我想不出有什么理由让你一起使用
replay().publish()