Ответ 1
Observable
- это общий строительный блок ReactiveX, источник события, который испускает значения с течением времени. (и, следовательно, существует в каждом языке, на котором распространяется ReactiveX)
Короче. Наблюдаемые события:
onNext * (onCompleted | onError)?/(* ноль или более? - ноль или 1)
Single
и Completable
- это новые типы, введенные исключительно в RxJava, которые представляют собой уменьшенные типы Observable
, которые имеют более сжатый API.
Single
представляют Observable
которые испускают одно значение или ошибку.
Completable
представляют Observable
который не испускает значения, но только события терминала, либо onError
либо onCompleted
Вы можете думать о различиях, как о различиях метода, который возвращает:
-
Коллекция объектов - наблюдаемая
-
Однолокальный объект - Single
-
и метод, который не возвращает значения (метод void) - Completable.
Single
может быть уместным, если у вас есть ориентированный на задачи Observable, и вы ожидаете одно значение, например, запрос сети, который выполняется один раз, и возвращаемое значение (или ошибка), сетевой вызов работает один раз, то есть вы не ожидаете, что он вернет дополнительные значения со временем. Другим примером является работа с данными из базы данных DB.
Completable
подходит, если у вас есть Observable
и вы не заботитесь о значении, полученном в результате операции, или нет. Например, например, обновление кеша, операция может либо преуспеть/сбой, но нет значения.
Другим примером является некоторая длительная операция init, которая ничего не возвращает. Это может быть сетевой вызов UPDATE/PUT, результатом которого является только индикация успеха.
В любом случае, Completable и Single не добавляют новые возможности, но они внедряют более надежные и сжатые API, которые больше описывают операции над Observable, которые открываются API.
Редактировать:
RxJava2 Maybe
:
RxJava2 добавил новый тип под названием Maybe
Maybe
это комбинация Completable
и Single.
На том же языке, что и выше, Maybe
можно рассматривать как метод, который возвращает Optional
какой-либо тип. Optional
- это оболочка вокруг объекта, которая явно указывает, есть ли у нас какое-то значение - Object
или нет (вместо null). Maybe
мы можем либо иметь какое-то значение точно так же, как Single
или ничего не вернуть - точно так же, как Completable
. Кроме того, как и то, и другое, мы имеем ошибку. Maybe
это ценно, когда мы хотим отметить, что Observable
может не иметь значения и будет просто закончен.
Пример будет извлечен из кеша, мы не обязательно будем иметь значение в кеше, поэтому в этом случае мы закончим, ow, мы получим onNext
со значением из кеша.
Это также полезно обрабатывать ненулевые значения в потоке с RxJava2.
RxJava2 Flowable
:
Сначала определите противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем их можно обрабатывать. Flowable
имеет поддержку противодавления, позволяющую запрашивать элементы в нижнем течении. Вы можете больше узнать о различиях здесь.