Android RxJava-将delaySubscription与withLatestFrom一起使用
很难解释我的问题,这就是为什么我会尝试用一个更简单的例子来解释。(我还将在括号中包含我的案例,以明确我需要解决此问题的原因) 正如你所看到的,随机数产生了两次Android RxJava-将delaySubscription与withLatestFrom一起使用,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,很难解释我的问题,这就是为什么我会尝试用一个更简单的例子来解释。(我还将在括号中包含我的案例,以明确我需要解决此问题的原因) 正如你所看到的,随机数产生了两次 还有别的办法解决这个问题吗?如果是,怎么办?这是因为delayedRandomNumber是单播还是单播。每个订阅都有自己的生产者(在您的情况下,Observable.fromCallable中的随机数生成是生产者) 为了避免这个问题,您可以使用操作符多播delayedRandomNumber val delayedRandomN
还有别的办法解决这个问题吗?如果是,怎么办?这是因为
delayedRandomNumber
是单播还是单播。每个订阅都有自己的生产者(在您的情况下,Observable.fromCallable中的随机数生成是生产者)
为了避免这个问题,您可以使用操作符多播delayedRandomNumber
val delayedRandomNumber =
Observable.fromCallable {
val randomNumber = Random().nextInt()
Log.d("LogTag", "random number = $randomNumber")
randomNumber
}.delay(5000, TimeUnit.MILLISECONDS)
.share()
输出
random number = -942235082
result=-942235082
-942235082 mod 1 = 0
result=-942235082
-942235082 mod 2 = 0
result=-942235082
-942235082 mod 3 = -2
请阅读太多,因为我发现它有帮助时,与多播观测问题 这是因为
delayedRandomNumber
是单播或单播。每个订阅都有自己的生产者(在您的情况下,Observable.fromCallable中的随机数生成是生产者)
为了避免这个问题,您可以使用操作符多播delayedRandomNumber
val delayedRandomNumber =
Observable.fromCallable {
val randomNumber = Random().nextInt()
Log.d("LogTag", "random number = $randomNumber")
randomNumber
}.delay(5000, TimeUnit.MILLISECONDS)
.share()
输出
random number = -942235082
result=-942235082
-942235082 mod 1 = 0
result=-942235082
-942235082 mod 2 = 0
result=-942235082
-942235082 mod 3 = -2
请阅读太多,因为我发现它有帮助时,与多播观测问题