Нужно ли мне проверять isdisposed () перед вызовом dispose ()?

Я изучаю RxJava, и я заметил, что большая часть кода примера выполняет проверку isDisposed() перед вызовом dispose(). Я не заметил никаких проблем, когда позвонил в dispose() на уже утилизированном Disposable.

Итак, мой вопрос: нужна ли мне проверка isDisposed()? Есть ли ситуации, когда мне следует проверить isDisposed() перед утилизацией? Каковы плюсы и минусы проведения проверки в первую очередь?

10
0
2 740
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Звонить isDisposed бессмысленно. Реализации dispose уже делают это за вас и следят за тем, чтобы повторные вызовы не выполнялись или не давали заметного эффекта.

К сожалению, кто-то на заре RxJava начал писать с ним примеры, а теперь все продолжают копировать этот шаблон.

Имеет немного больше смысла проверить isDisposed перед вызовом, например, onNext, но вы не можете делать это очень часто за пределами Observable.create().

Я так не думаю, если вы проверите то есть реализацию CompositeDisposable (конечно, если вы используете этот класс, а не другую реализацию одноразового интерфейса) есть:

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

Итак, ответ зависит от того, каким образом реализован интерфейс Disposable. Вы можете проверить его в JetBrains IDE, щелкнув правой кнопкой мыши и выбрав> реализацию

dispose в основном предназначен для закрытия потока вашей подписки. вы проверяете, что isdisposed () сообщит вам, активен ли существующий поток. если через этот поток проходят какие-либо соответствующие данные, они будут вырезаны.

Ofcors, вы можете вызвать в распоряжение в любое время.

как насчет safeDispose?

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

Другие вопросы по теме