Это совершенно правильный вопрос, и его не следовало закрывать. Хотя rx - отличная библиотека, документация и примеры, к сожалению, крайне скудны и запутаны.
RunLoop
Ответы:
249
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.
Редактировать:
RxJava2 Maybe:
RxJava2 добавлен новый тип , который называется Maybe, Maybeэто сочетание Completableи Single.
На том же языке, что и выше, Maybeего можно рассматривать как метод, возвращающий
Optionalнекоторый тип, Optionalэто оболочка вокруг объекта, которая явно сообщает, есть ли у нас какое-то значение в нем - Objectили нет (вместо null).
С помощью Maybeмы можем либо иметь какое-то значение точно так же, Singleлибо ничего не возвращать - точно так же Completable. Вдобавок, как и у обоих, у нас есть ошибка. Maybeценно, когда мы хотим отметить, что объект Observableможет не иметь значения и просто завершится.
Пример будет извлечен из кеша, у нас не обязательно будет значение в кеше, поэтому в этом случае мы завершим, как только мы получим onNextзначение из кеша.
Это также достойно обработки ненулевых значений в потоке с помощью RxJava2.
RxJava2 Flowable:
Во-первых, давайте определим противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем могут быть обработаны. Flowableимеет поддержку противодавления, позволяющую вниз по потоку запрашивать элементы. Подробнее о различиях можно прочитать здесь .
Ответы:
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.
Редактировать:
RxJava2
Maybe
:RxJava2 добавлен новый тип , который называется
Maybe
,Maybe
это сочетаниеCompletable
и Single.На том же языке, что и выше,
Maybe
его можно рассматривать как метод, возвращающийOptional
некоторый тип,Optional
это оболочка вокруг объекта, которая явно сообщает, есть ли у нас какое-то значение в нем -Object
или нет (вместо null).С помощью
Maybe
мы можем либо иметь какое-то значение точно так же,Single
либо ничего не возвращать - точно так жеCompletable
. Вдобавок, как и у обоих, у нас есть ошибка.Maybe
ценно, когда мы хотим отметить, что объектObservable
может не иметь значения и просто завершится.Пример будет извлечен из кеша, у нас не обязательно будет значение в кеше, поэтому в этом случае мы завершим, как только мы получим
onNext
значение из кеша.Это также достойно обработки ненулевых значений в потоке с помощью RxJava2.
RxJava2
Flowable
:Во-первых, давайте определим противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем могут быть обработаны.
Flowable
имеет поддержку противодавления, позволяющую вниз по потоку запрашивать элементы. Подробнее о различиях можно прочитать здесь .источник
Maybe<T>
сутиSingle<T?>
,?Single
этоCompletable
с возвращаемым значением?Краткий ответ я нашел здесь в разделе RXJava.
источник