代码之家  ›  专栏  ›  技术社区  ›  idunnololz adsion

调用dispose()之前是否需要检查isDisposed()?

  •  12
  • idunnololz adsion  · 技术社区  · 6 年前

    我正在学习RxJava,我注意到许多示例代码 isDisposed() 呼叫前检查 dispose() .我打电话时没有注意到任何问题 dispose() 在已处理的 Disposable

    所以我的问题是,我需要 isDisposed() 检查是否有我应该检查的情况 isDisposed() 在处理之前?首先进行检查的利弊是什么?

    4 回复  |  直到 6 年前
        1
  •  15
  •   akarnokd    6 年前

    打电话没什么意义 isDisposed dispose 实现已经为您做到了这一点,并确保重复调用没有操作或没有可检测的影响。

    不幸的是,在RxJava的早期,有人开始用它编写示例,现在每个人都在复制这种模式。

    检查更有意义 isDisposed公司 通话前 onNext 例如,但你不经常在户外这样做 Observable.create()

        2
  •  2
  •   Bartosz    6 年前

    我不这么认为,如果您检查,即 CompositeDisposable (当然,如果您使用该类,而不是一次性接口的另一个实现) 有:

     @Override
        public void dispose() {
            if (disposed) {
                return;
            }
    ...rest of method body
    @Override
        public boolean isDisposed() {
            return disposed;
        }
    

    所以答案是,这取决于一次性接口的实现方式,您可以在JetBrains IDE中通过右键单击并转到>实施

        3
  •  0
  •   entangled    6 年前

    dispose主要用于关闭订阅流。您正在检查isdisposed(),它将告诉您现有流是否处于活动状态。如果任何相关数据通过该流,它将被剪切。

    对于Cors,您可以随时调用dispose。

        4
  •  0
  •   Maher Abuthraa    3 年前

    safeDispose怎么样?

    fun Disposable?.safeDispose() {
        if (this?.isDisposed == false) {
            dispose()
        }
    }