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


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

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

2 58

2 ответа:

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

Single и Completable являются ли новые типы, введенные исключительно в RxJava, которые представляют собой уменьшенные типы Observable, которые имеют более сжатый ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.

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

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

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

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

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

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

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

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

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

Edit:

RxJava2 Maybe:

RxJava2 добавил новый тип под названием Maybe,Maybe сочетание Completable и один.

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

RxJava2 Flowable:

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

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

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