В чем разница между Observable, Completable и Single в RxJava

Может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?

В каком сценарии мы используем одно по сравнению с другим?


person Raja Jawahar    schedule 13.03.2017    source источник
comment
Вы что-нибудь испытали?   -  person J. Chomel    schedule 13.03.2017
comment
Я только недавно начал .. @ J.Chomel   -  person Raja Jawahar    schedule 14.03.2017
comment
Это совершенно правильный вопрос, и его не следовало закрывать. Хотя rx - отличная библиотека, документация и примеры, к сожалению, крайне скудны и сбивают с толку.   -  person RunLoop    schedule 17.11.2017


Ответы (3)


Observable - это общий строительный блок ReactiveX источника событий, который генерирует значения с течением времени. (и, следовательно, существует на всех языках, на которые распространяется ReactiveX)
вкратце Наблюдаемые события:
onNext * (onCompleted | onError)? / (* ноль или больше? - ноль или 1)

Single и _ 3_ - это новые типы, представленные исключительно в RxJava, которые представляют сокращенные типы Observable, которые имеют более сжатый API.

Single представляют Observable, которые выдают одно значение или ошибку.

Completable представляют Observable, который не генерирует никакого значения, а только события терминала, либо onError, либо onCompleted

Вы можете думать о различиях как о различиях метода, который возвращает:

  • Коллекция объектов - наблюдаемые

  • Один объект - Single

  • и метод, который не возвращает значений (метод void) - Completable.

Single может быть уместным, когда у вас есть Observable, ориентированный на задачи, и вы ожидаете единственное значение, например сетевой запрос, который выполняется один раз и возвращает значение (или ошибку), сетевой вызов выполняется единовременно, то есть вы не ожидаете, что он вернет дополнительные ценности с течением времени. Другой пример - операция выборки данных из БД.

Completable подходит, когда у вас есть Observable, и вас не волнует значение, полученное в результате операции, или его нет. Примеры: обновление кеша, например, операция может быть успешной / неудачной, но нет значения.
Другой пример - длительная операция инициализации, которая ничего не возвращает. Это может быть только сетевой вызов UPDATE / PUT, который привел к индикации успеха.

В любом случае Completable и Single не добавляют новых возможностей, но они вводят более надежные и лаконичные API, которые больше рассказывают об операциях, лежащих в основе Observable, которые предоставляет API.

Изменить:

RxJava2 Maybe:

RxJava2 добавил новый тип под названием Maybe, Maybe - это комбинация Completable и Single.

На том же языке, что и выше, Maybe можно рассматривать как метод, возвращающий Optional некоторого типа, Optional - это оболочка вокруг объекта, которая явно сообщает, есть ли у нас в нем какое-то значение - Object или нет (вместо null).
С Maybe мы можем либо иметь какое-то значение точно такое же, как Single, либо ничего не возвращать - точно так же, как Completable. Вдобавок, как и в обоих случаях, у нас есть ошибка.
Maybe полезен, когда мы хотим отметить, что Observable может не иметь значения и просто завершится.
Пример будет извлечен из кеша, у нас не обязательно будет значение в кеше, поэтому в этом случае мы завершим, o.w. мы получим onNext со значением из кеша.
Это также полезно для обработки ненулевых значений в потоке с помощью RxJava2.

RxJava2 Flowable:

Во-первых, давайте определим противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем могут быть обработаны. Flowable имеет поддержку противодавления, позволяющую вниз по потоку запрашивать элементы. Подробнее о различиях можно узнать здесь.

person yosriz    schedule 13.03.2017
comment
А как насчет текучести? - person Niraj Chauhan; 11.09.2017
comment
Итак, если я пишу на Котлине, Maybe<T>, по сути, Single<T?>? - person AAverin; 09.10.2017
comment
Можете ли вы считать Single Completable с возвращенным значением? - person Eido95; 16.10.2018

  1. Flowable и Observable могут представлять конечные или бесконечные потоки. Текучая поддержка противодавления.
  2. Одиночные - это потоки с одним элементом.
  3. Возможно - это потоки с 0 или одним элементом.
  4. Наконец, Completable представляет поток без элементов, то есть он может завершиться только без значения или завершиться с ошибкой.

Краткий ответ я нашел здесь в разделе RXJava.

person Charith De Silva    schedule 04.06.2018

Single и SingleObserver

Single всегда выдает только одно значение или выдает ошибку. Single всегда следит за эмиссией.

Вариант использования Single - это сетевой вызов для получения ответа, поскольку ответ будет получен сразу.

Обратите внимание, что SingleObserver не имеет функции onNext () для передачи данных, вместо этого данные будут получены в методе onSuccess(Note note).


Completable & CompletableObserver

Completable observable не отправляет никаких данных, а сообщает о статусе задачи success или failure. Эту наблюдаемую можно использовать, когда вы хотите выполнить некоторую задачу и не ожидаете какой-либо ценности.

Вариант использования - это обновление некоторых данных на сервере с помощью запроса PUT.

person akhilesh0707    schedule 01.09.2020