RxJava基本使用–上游与下游
var disposable : Disposable? = null
private fun rxTest1() {
//起点 被观察者
Observable.create(ObservableOnSubscribe<Int> {
emitter ->
run {
emitter.onNext(11)
emitter.onComplete()
}
})
//订阅被观察者与观察者
.subscribe(
//终点 观察者
object : Observer<Int> {
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
disposable = d
}
override fun onNext(t: Int) {
Log.e("TAG","value=$t")
}
override fun onError(e: Throwable) {
}
})
}
override fun onDestroy() {
super.onDestroy()
cancel()
//当Activity销毁后,事件上游仍然在发送,则通过dispose()切断下游,让下游不再接收
if (disposable != null) disposable!!.dispose()
}
通过在上游发送数据,在下游接收数据。
其中执行顺序为:
未执行onComplete()
- onSubscribe()订阅关系。
- 被观察者中的emitter.onNext(11)语句
- 观察者中onNext()方法
执行onComplete()
- onSubscribe()订阅关系。
- 被观察者中的emitter.onNext(11)语句
- 观察者中onNext()方法
- 观察者中onComplete()完结方法
切断下游
当Activity销毁后,事件上游仍然在发送,则在onDestroy()方法中通过dispose()切断下游,让下游不再接收。
注意
- 执行完emitter.onComplete()方法后在其后的所有发射数据,观察者均不接收
- onError()方法与onComplete()方法只会执行一个,即报错后执行onError()方法后,即时调用了emitter.onComplete()也不执行。
- 被观察者中emitter.onComplete()后再调用emitter.onError()会使程序报错。
- 观察者中重写的onSubscribe()订阅关系的方法永远是第一个执行的方法。
- 观察者完整版:Observer 简化版:Consumer()仅实现onNext接收的方法