Может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?
В каком сценарии мы используем одно по сравнению с другим?
Может ли кто-нибудь объяснить разницу между Observable, Completable и Single в RxJava с четкими примерами?
В каком сценарии мы используем одно по сравнению с другим?
Ответы:
Observable
- это общий строительный блок ReactiveX источника событий, который генерирует значения с течением времени. (и, следовательно, существует на всех языках, на которые распространяется ReactiveX)
вкратце Наблюдаемые события:
onNext * (onCompleted | onError)? / (* ноль или больше? - ноль или 1)
Single
и Completable
представляют собой новые типы, представленные исключительно в 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
может не иметь значения и просто завершится.
Пример будет извлечен из кеша, у нас не обязательно будет значение в кеше, поэтому в этом случае мы завершим, как только мы получим onNext
значение из кеша.
Это также достойно обработки ненулевых значений в потоке с помощью RxJava2.
Flowable
:Во-первых, давайте определим противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем могут быть обработаны. Flowable
имеет поддержку противодавления, позволяющую вниз по потоку запрашивать элементы. Подробнее о различиях можно прочитать здесь .
Maybe<T>
сути Single<T?>
,?
Single
это Completable
с возвращаемым значением?
Краткий ответ я нашел здесь в разделе RXJava.