【发布时间】:2018-07-12 17:58:10
【问题描述】:
我写了一个简单的例子,希望有人能帮助我理解这段代码以及为什么它在 Bifunction 中打印文本两次:
var subject1: BehaviorSubject<String>? = null
var subject2: BehaviorSubject<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.v("mytag", "oncreate called now")
subject1 = BehaviorSubject.createDefault("hello")
subject2 = BehaviorSubject.createDefault("goodbye") //not subscribed to
subject1?.subscribe { Log.v("subject1 it1", it) }
btn.setOnClickListener {
subject1?.onNext("hello btnclicked" + Random().nextInt(9000))
ObservableCombineLatest.combineLatest(
subject1,subject2, BiFunction<String,String,String>
{ t1, t2 -> "biFun call" }).
subscribe { msg-> Log.d("mytag","combined latest update: $msg")}
}
}
}
当我第一次点击按钮时,这是输出:
07-13 00:55:09.124 10559 10559 D mytag : combined latest update: biFun call
07-13 00:55:09.130 10559 10559 D mytag : combined latest update: biFun call
但是为什么?只有一个主题发生了变化,那就是 subject1 变量。当我单击按钮时,它调用 onNext 开始发射。为什么要打印两次?我期待,因为 subject2 从未使用过,它不会触发。
【问题讨论】:
-
您是否尝试过调试它并且没有故意丢失触发 biFun 调用的值?
标签: rx-java rx-java2 behaviorsubject