Может ли кто-нибудь объяснить разницу между 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.