Кто держит ссылку в ReactiveX?

В Java наблюдаемый объект PropertyChangeSupport поддерживает список наблюдатели. Итак, если наблюдаемое удаляется, наблюдатель подвергается сборке мусора.

Итак, observable содержит ссылку.

У меня сложилось впечатление, что это не так для ReactiveX. Хотя observable имеет метод подписки, он возвращает объект Subscription. Этот объект содержит ссылку?

Если я добавлю этот объект в наблюдатель с помощью add() будет ли это единственным способом заставить наблюдателя удерживать ссылку? Или наблюдатель все равно держит ссылку?


person Suzan Cioc    schedule 31.01.2017    source источник


Ответы (1)


Я думаю, что все еще Observable поддерживает связь с Observer. Проверьте код ниже.

private Observable<CurrencyRatesDTO> getCurrencyRatesObservable(Set<String> currencies) {
        return Observable.<CurrencyRatesDTO> create(sub -> {
            CurrencyRatesDTO currencyRatesDTO = restTemplate.getForEntity(
                    CURRENCY_SERVICE_API + RestUtil.QUERY_PARAM_START_SYMBOL
                            + RestUtil.getQueryParamStringForMultiValuedAttribute(SYMBOLS, currencies),
                    CurrencyRatesDTO.class).getBody();
            sub.onNext(currencyRatesDTO);
            sub.onCompleted();
        }).doOnNext(c -> log.debug("Currency rates were retrieved successfully."))
                .doOnError(e -> log.error("An ERROR occurred while retrieving the currency rates.", e));
}

Мы вызываем некоторый сервис отдыха асинхронно. Как только мы получаем результат, мы уведомляем наблюдателя с помощью метода onNext и испускаем элемент, прежде чем сигнализировать о завершении наблюдателю. Я написал несколько сообщений в блоге [1][2][3], и вы можете найти их полезными в среде RxJava. Ниже приведен небольшой отрывок из моего сообщения в блоге. Из него довольно ясно, что Observable содержит ссылку на Observer.

RxJava предоставляет Observables и Observers. Наблюдаемые могут отправлять значения. Наблюдатели, смотрите Observables, подписавшись на них. Наблюдатели уведомляются, когда Observable выдает значение, когда Observable говорит, что произошла ошибка. Они также уведомляются, когда Observable отправляет информацию о том, что у него больше нет значений для генерации. Соответствующие функции — это onNext, onError и onCompleted() из интерфейса Observer. Экземпляр подписки представляет собой связь между наблюдателем и наблюдаемым. Если вы вызовете unsubscribe() для этого экземпляра, соединение будет удалено.

Надеюсь это поможет. Удачного кодирования!

[1]http://ravindraranwala.blogspot.com/2016/12/introduction-java-reactive-extentions-in.html [2]http://ravindraranwala.blogspot.com/2017/01/calling-exterenal-nosql-database.html [3]http://ravindraranwala.blogspot.com/2017/01/combine-emissions-of-multiple_16.html

person Ravindra Ranwala    schedule 31.01.2017