В чем разница между Observable, Completable и Single в RxJava
может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?
в каком сценарии мы используем один над другими?
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
имеет поддержку обратного давления позволяющ идущему дальше по потоку запросить детали. Вы можете прочитать больше о различиях здесь.
- Flowable и наблюдаемых может представлять конечные или бесконечные потоки. Текучая поддержка давления.
- один это потоки с одним элементом.
- может быть потоки с 0 или одним элементом.
- наконец - то a Completable представляет собой поток без элементов, то есть это может завершаться только без значения или сбоя.
A краткий ответ я нашел здесь в разделе RXJava.