【发布时间】:2020-07-03 07:19:56
【问题描述】:
这是两个线程循环大约 100 毫秒的示例。 奇特的是,循环的方式不是while(true)等,而是执行后用onNext将item添加到Observable的方式。
kotlin 编写的代码如下所示。
private val _ps_2_thread_loop = PublishSubject.create<Array<Any>>()
fun start() {
_ps_2_thread_loop
.observeOn(Schedulers.io())
.map {
val cmd = it[0] as String
when(cmd) {
"cmd0" -> {
LogEx.d("cmd0 start")
runBlocking { delay(100) }
LogEx.d("cmd0 fin")
_ps_2_thread_loop.onNext(arrayOf("cmd0"))
}
}
return@map it
}
.observeOn(Schedulers.io())
.map {
val cmd = it[0] as String
when(cmd) {
"cmd1" -> {
LogEx.d("cmd1 start")
runBlocking { delay(100) }
LogEx.d("cmd1 fin")
_ps_2_thread_loop.onNext(arrayOf("cmd1"))
}
}
return@map it
}
.subscribe()
_ps_2_thread_loop.onNext(arrayOf("cmd0"))
_ps_2_thread_loop.onNext(arrayOf("cmd1"))
}
预期结果是 cmd0 和 cmd1 被永久记录。 但是,cmd0 或 cmd1 在中间被取消。 在日志上,它似乎在 onNext 之前工作正常,但它似乎在 Observable 之后的某个地方被跳过,即 RxJava。
日志如下所示。
07-03 16:02:26.010 24540 24638 D LogEx : MyTestActivity.kt:759:apply RxCachedThreadScheduler-1 cmd0 start
07-03 16:02:26.137 24540 24638 D LogEx : MyTestActivity.kt:761:apply RxCachedThreadScheduler-1 cmd0 fin
07-03 16:02:26.140 24540 24638 D LogEx : MyTestActivity.kt:759:apply RxCachedThreadScheduler-1 cmd0 start
07-03 16:02:26.141 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.242 24540 24638 D LogEx : MyTestActivity.kt:761:apply RxCachedThreadScheduler-1 cmd0 fin
07-03 16:02:26.243 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.243 24540 24638 D LogEx : MyTestActivity.kt:759:apply RxCachedThreadScheduler-1 cmd0 start
07-03 16:02:26.345 24540 24638 D LogEx : MyTestActivity.kt:761:apply RxCachedThreadScheduler-1 cmd0 fin
07-03 16:02:26.346 24540 24638 D LogEx : MyTestActivity.kt:759:apply RxCachedThreadScheduler-1 cmd0 start
07-03 16:02:26.346 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.448 24540 24638 D LogEx : MyTestActivity.kt:761:apply RxCachedThreadScheduler-1 cmd0 fin
07-03 16:02:26.448 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.449 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.552 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.554 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.658 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.660 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.763 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.766 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.867 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.870 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:26.972 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:26.975 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.077 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.080 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.183 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.186 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.289 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.292 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.394 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.397 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.500 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.503 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.607 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.610 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.715 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.719 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.823 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.826 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:27.930 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:27.933 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.037 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.040 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.143 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.146 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.249 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.252 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.356 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.359 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.463 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.466 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.569 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.572 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.675 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.678 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.784 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.789 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.892 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:28.896 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:28.999 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
07-03 16:02:29.002 24540 24639 D LogEx : MyTestActivity.kt:774:apply RxCachedThreadScheduler-2 cmd1 start
07-03 16:02:29.107 24540 24639 D LogEx : MyTestActivity.kt:776:apply RxCachedThreadScheduler-2 cmd1 fin
...
【问题讨论】:
标签: android kotlin observable rx-java