Различия между RxJava1 и RxJava2
Я смотрел документацию RxJava1 https://github.com/ReactiveX/RxJava/releases и RxJava2 https://github.com/ReactiveX/RxJava/wiki/Reactive-Streams и кажется как уникальное отличие в том, что RxJava 2 имеет поток Java.
Любые другие разные?.
Я работаю с версией 1.1.3, но не уверен, стоит ли переходить к RxJava2, поскольку мы уже используем потоки Java 8 в нашем коде
С уважением.
Ответы
Ответ 1
Оба RxJava 1.x и 2.x предназначены для Java 6+, и поэтому мы не можем поддерживать потоки Java 8 в любой из версий. Было решено сохранить поддержку множества Android-устройств и версий, которые никогда не будут обновлены до совместимой с Java 8-й версией. Если вам нужна поддержка Java 8, рассмотрите возможность использования Reactor-Core из Pivotal.
Основное различие между ними заключается в том, что 2.x нацеливается на SPI Reactive-Streams напрямую, и для этого он полностью переписан с нуля. В настоящее время мы находимся в режиме предварительного просмотра, который вы можете получить, как описано в 2.x branch readme.
Полная переработка 2.x значительно улучшила потребление памяти и производительность; вот эталонный тест, который сравнивает различные версии и библиотеки.
На поверхности API мы планируем поддерживать поддержку всех операторов, которые присутствуют в 1.x, и, вероятно, продлить обе версии с новыми в течение нескольких лет до поддержки на концах 1.x.
Так как 2.x - новая архитектура, необходимо также обновить множество зависимых библиотек (например, Retrofit); которые, скорее всего, не произойдут раньше конца августа или могут занять несколько месяцев, чтобы наверстать упущенное. Вот страница wiki, которая содержит основные отличия.
Ответ 2
Как я реализовал RxJava2 в мой примерный проект - ссылка
Следующие различия между RxJava2 и RxJava1:
-
Чтобы позволить RxJava 1.x и RxJava 2.x бок о бок, RxJava 2.x находится под координатами maven io.reactivex.rxjava2:rxjava:2.x.y
, а классы доступны ниже io.reactivex
.
-
Пользователи, переключающиеся с 1.x на 2.x, должны реорганизовать свой импорт, но осторожно.
-
onCompleted
→ onComplete
- без конечного d
-
CompositeSubscription
→ CompositeDisposable
- CompositeDisposable
как CompositeSubscription
и Subscription
удалены
-
Func1
→ Function
-
Func2
→ BiFunction
Оператор -
limit
удален - используйте take
в RxJava2
RxJava 2.0 полностью переписан с нуля поверх спецификации Reactive Streams. Сама спецификация эволюционировала из RxJava 1.x и обеспечивает общую базовую линию для реактивных систем и библиотек.
Поскольку Reactive-Streams имеет другую архитектуру, он задает изменения некоторым известным типам RxJava.
RxJava2 имеет лучшее производительность и использование низкой памяти над RxJava1
[ Источник: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0]
Ответ 3
Одно из основных отличий относится к оператору .filter
. Как указано в документах:
Кроме того, операторы, требующие предиката, больше не используют Func1<T,
Boolean>
, а имеют отдельный примитивный возвращаемый тип Predicate<T>
(позволяет лучше встраивать из-за отсутствия автобоксинга).
Итак, для оператора .filter
вам нужно будет изменить, как в примере ниже
RxTextView.textChanges(editText)
.debounce(400, TimeUnit.MILLISECONDS)
.filter(new Predicate<CharSequence>() {
@Override
public boolean lengthOk(CharSequence charSequence) {
return charSequence.length() > 3;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(/* attach your observer */);