Может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?
В каком сценарии мы используем одно по сравнению с другим?
Может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?
В каком сценарии мы используем одно по сравнению с другим?
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.
Изменить:
Maybe
:RxJava2 добавил новый тип под названием Maybe
, Maybe
- это комбинация Completable
и Single.
На том же языке, что и выше, Maybe
можно рассматривать как метод, возвращающий Optional
некоторого типа, Optional
- это оболочка вокруг объекта, которая явно сообщает, есть ли у нас в нем какое-то значение - Object
или нет (вместо null).
С Maybe
мы можем либо иметь какое-то значение точно такое же, как Single
, либо ничего не возвращать - точно так же, как Completable
. Вдобавок, как и в обоих случаях, у нас есть ошибка. Maybe
полезен, когда мы хотим отметить, что Observable
может не иметь значения и просто завершится.
Пример будет извлечен из кеша, у нас не обязательно будет значение в кеше, поэтому в этом случае мы завершим, o.w. мы получим onNext
со значением из кеша.
Это также полезно для обработки ненулевых значений в потоке с помощью RxJava2.
Flowable
:Во-первых, давайте определим противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем могут быть обработаны. Flowable
имеет поддержку противодавления, позволяющую вниз по потоку запрашивать элементы. Подробнее о различиях можно узнать здесь.
Maybe<T>
, по сути, Single<T?>
?
- person AAverin; 09.10.2017
Single
Completable
с возвращенным значением?
- person Eido95; 16.10.2018
Краткий ответ я нашел здесь в разделе RXJava.
Single и SingleObserver
Single
всегда выдает только одно значение или выдает ошибку. Single
всегда следит за эмиссией.
Вариант использования Single - это сетевой вызов для получения ответа, поскольку ответ будет получен сразу.
Обратите внимание, что SingleObserver
не имеет функции onNext () для передачи данных, вместо этого данные будут получены в методе onSuccess(Note note)
.
Completable & CompletableObserver
Completable
observable не отправляет никаких данных, а сообщает о статусе задачи success
или failure
. Эту наблюдаемую можно использовать, когда вы хотите выполнить некоторую задачу и не ожидаете какой-либо ценности.
Вариант использования - это обновление некоторых данных на сервере с помощью запроса PUT.