dispose
2020-03-27 本文已影响0人
ivotai
对于普通 Observable 来说
订阅就是发射,dispose 意味着取消订阅,也就是停止发射。
lateinit var disposable: Disposable
Observable.range(1, 5).subscribe(object : Observer<Int> {
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
disposable = d
}
override fun onNext(t: Int) {
Logger.d(t)
if (t == 3)
disposable.dispose()
}
override fun onError(e: Throwable) {
}
})
2020-03-27 14:53:37.632 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:53:37.635 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ Thread: main
2020-03-27 14:53:37.635 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.636 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:32)
2020-03-27 14:53:37.637 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:41)
2020-03-27 14:53:37.639 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.639 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ 1
2020-03-27 14:53:37.639 9192-9192/com.example.myapplication D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:53:37.640 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:53:37.643 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ Thread: main
2020-03-27 14:53:37.643 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.643 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:32)
2020-03-27 14:53:37.644 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:41)
2020-03-27 14:53:37.644 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.645 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ 2
2020-03-27 14:53:37.645 9192-9192/com.example.myapplication D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:53:37.650 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:53:37.651 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ Thread: main
2020-03-27 14:53:37.651 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.651 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:32)
2020-03-27 14:53:37.653 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$1.onNext (MainActivity.kt:41)
2020-03-27 14:53:37.653 9192-9192/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:53:37.654 9192-9192/com.example.myapplication D/PRETTY_LOGGER: │ 3
2020-03-27 14:53:37.654 9192-9192/com.example.myapplication D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
对于 Subject 来说
订阅是把 Observer 添加到需要通知的集合里,dispose 则是将对应 Observer 移出集合。
lateinit var disposable: Disposable
val publishSubject = PublishSubject.create<Any>()
// 添加 Observer1 到通知集合
publishSubject.subscribe(object : Observer<Any> {
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
disposable = d
}
override fun onNext(t: Any) {
Logger.d(t)
}
override fun onError(e: Throwable) {
}
})
// 添加 Observer2 到通知集合
publishSubject.subscribe { Logger.d(it) }
// 将 Observer1 移出集合
disposable.dispose()
// 发射
publishSubject.onNext(1)
2020-03-27 14:56:41.387 9565-9565/com.example.myapplication D/PRETTY_LOGGER: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2020-03-27 14:56:41.387 9565-9565/com.example.myapplication D/PRETTY_LOGGER: │ Thread: main
2020-03-27 14:56:41.388 9565-9565/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:56:41.388 9565-9565/com.example.myapplication D/PRETTY_LOGGER: │ LambdaObserver.onNext (LambdaObserver.java:63)
2020-03-27 14:56:41.389 9565-9565/com.example.myapplication D/PRETTY_LOGGER: │ MainActivity$onCreate$2.accept (MainActivity.kt:51)
2020-03-27 14:56:41.390 9565-9565/com.example.myapplication D/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2020-03-27 14:56:41.390 9565-9565/com.example.myapplication D/PRETTY_LOGGER: │ 1
2020-03-27 14:56:41.390 9565-9565/com.example.myapplication D/PRETTY_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
两者统一一下
dispose 代表对应 Observer 可以被回收了。