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 可以被回收了。

上一篇下一篇

猜你喜欢

热点阅读