android 在调用dispose()之前,我需要检查isDisposed()吗?

6yjfywim  于 2023-01-11  发布在  Android
关注(0)|答案(4)|浏览(240)

我正在学习RxJava,我注意到很多示例代码在调用dispose()之前都会进行isDisposed()检查。当我在已经释放的Disposable上调用dispose()时,我没有注意到任何问题。
所以我的问题是,我是否需要检查isDisposed()?是否存在应该在处理之前检查isDisposed()的情况?首先进行检查的优点和缺点是什么?

ifmq2ha2

ifmq2ha21#

调用isDisposed没有什么意义。dispose实现已经为您做了这件事,并确保重复调用是无操作的或没有可检测的效果。
不幸的是,在RxJava早期,有人开始用它编写示例,现在每个人都在复制这种模式。
例如,在调用onNext之前检查isDisposed更有意义,但在Observable.create()之外,您通常不会这样做。

sf6xfgos

sf6xfgos2#

我不这么认为,如果你看一下CompositeDisposable的实现

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

pgx2nnw83#

dispose基本上是关闭你订阅的流.你正在检查isdispose()将告诉你现有的流是否是活动的.如果任何相关的数据通过那个流它将被剪切.
Ofcors,你可以随时打电话处理。

83qze16e

83qze16e4#

安全处置怎么样?

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

相关问题