2017-01-31 2 views
2

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

Таким образом, наблюдаемый имеет ссылку.

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

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

ответ

0

Я думаю, что Observable поддерживает соединение с наблюдателем. Ознакомьтесь с приведенным ниже кодом.

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)); 
} 

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

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

Надеюсь, это поможет. Счастливое кодирование!

[1] http://ravindraranwala.blogspot.com/2016/12/introducing-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

Смежные вопросы