我正在学习RxJava,我注意到很多示例代码在调用dispose()之前都会进行isDisposed()检查。当我在已经释放的Disposable上调用dispose()时,我没有注意到任何问题。所以我的问题是,我是否需要检查isDisposed()?是否存在应该在处理之前检查isDisposed()的情况?首先进行检查的优点和缺点是什么?
dispose()
isDisposed()
Disposable
ifmq2ha21#
调用isDisposed没有什么意义。dispose实现已经为您做了这件事,并确保重复调用是无操作的或没有可检测的效果。不幸的是,在RxJava早期,有人开始用它编写示例,现在每个人都在复制这种模式。例如,在调用onNext之前检查isDisposed更有意义,但在Observable.create()之外,您通常不会这样做。
isDisposed
dispose
onNext
Observable.create()
sf6xfgos2#
我不这么认为,如果你看一下CompositeDisposable的实现
CompositeDisposable
@Override public void dispose() { if (disposed) { return; } ...rest of method body @Override public boolean isDisposed() { return disposed; }
pgx2nnw83#
dispose基本上是关闭你订阅的流.你正在检查isdispose()将告诉你现有的流是否是活动的.如果任何相关的数据通过那个流它将被剪切.Ofcors,你可以随时打电话处理。
83qze16e4#
安全处置怎么样?
fun Disposable?.safeDispose() { if (this?.isDisposed == false) { dispose() } }
4条答案
按热度按时间ifmq2ha21#
调用
isDisposed
没有什么意义。dispose
实现已经为您做了这件事,并确保重复调用是无操作的或没有可检测的效果。不幸的是,在RxJava早期,有人开始用它编写示例,现在每个人都在复制这种模式。
例如,在调用
onNext
之前检查isDisposed
更有意义,但在Observable.create()
之外,您通常不会这样做。sf6xfgos2#
我不这么认为,如果你看一下
CompositeDisposable
的实现pgx2nnw83#
dispose基本上是关闭你订阅的流.你正在检查isdispose()将告诉你现有的流是否是活动的.如果任何相关的数据通过那个流它将被剪切.
Ofcors,你可以随时打电话处理。
83qze16e4#
安全处置怎么样?