Об использовании метода подписки с возвратом подписчика
Интересно, почему subscribeWith
Метод возвращает подписчика, но не является строго одноразовым или, может быть, подпиской.
Я думаю, что subscribeWith
метод был разработан для использования RxJava 1.x subscribe
метод, который возвращает подписку. Поэтому в 2.0, я думаю, что основное использование subscribeWith
Метод будет использовать с подписчиком, который реализует одноразовые.
Hoverver, так как subscribeWith
Метод может вернуть подписчика, возможно использование объекта (например, приведенный ниже код).
Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS)
.subscribeWith(new Subscriber<Long>() {
...
});
...
subscriber.onNext(999);
...
Это нормально или что-то, что я не должен делать?
2 ответа
Подписчик в 2.x не реализует Устранимый и потребует обертывания / угона каждого подписчика. Вы получаете обратно то, что вы подписались, и у нас есть ResourceSubscriber
а также DisposableSubscriber
что конкретно реализовать Disposable
правильно.
Однако, поскольку метод subscribeWith может возвращать подписчика, может быть возможно использование в подобной теме (например, в приведенном ниже коде).
Это не рекомендуется, поскольку вы нарушаете протокол, возможно, вызывая onNext
одновременно. (Это не результат subscribeWith
потому что вы могли бы предварительно создать Subscriber
, вызов subscribe()
а затем позвоните onNext()
на оригинале Subscriber
экземпляр нарушает протокол таким же образом.)
subscribeWith
действительно существует возможность работать с подписчиками, которые свободно поддерживают Disposable и допускают следующий шаблон:
CompositeDisposable cd = new CompositeDisposable();
cd.add(source.subscribeWith(new ResourceSubscriber<Integer>() { ... }));
Смотрите нашу вики для этого и других деталей 2.x.
Если у вас есть один и тот же наблюдатель, которого вы хотите привязать к разным наблюдаемым, используйте.subscribeWith, чтобы несколько наблюдаемых могли использовать одну и ту же реализацию наблюдателя.