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

时间:2018-04-11 09:54:19

标签: android rx-java2

我正在学习RxJava,我注意到很多示例代码在调用isDisposed()之前都会进行dispose()检查。当我在已经处置dispose()时调用Disposable时,我没有注意到任何问题。

所以我的问题是,我需要isDisposed()检查吗?在处理之前我是否应该检查isDisposed()?首先进行检查有哪些优缺点?

4 个答案:

答案 0 :(得分:3)

致电isDisposed毫无意义。 dispose实现已经为您执行此操作,并确保重复调用是无操作或无可检测的效果。

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

例如,在调用isDisposed之前检查onNext会更有意义,但您不会经常在Observable.create()之外这样做。

答案 1 :(得分:0)

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

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

所以答案是它取决于Disposable接口的实现方式,您可以通过右键单击JetBrains IDE进行检查,然后转到>实施

答案 2 :(得分:0)

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

Ofcors,您可以随时致电处置。

答案 3 :(得分:0)

safeDispose 怎么样?

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