dispose

作者: ivotai | 来源:发表于2020-03-27 14:55 被阅读0次

    对于普通 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 可以被回收了。

    相关文章

      网友评论

          本文标题:dispose

          本文链接:https://www.haomeiwen.com/subject/okbluhtx.html