В чем разница между 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.