Подтвердить что ты не робот

Различия между 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 в нашем коде

С уважением.

4b9b3361

Ответ 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, должны реорганизовать свой импорт, но осторожно.

  • onCompletedonComplete - без конечного d

  • CompositeSubscriptionCompositeDisposable - CompositeDisposable как CompositeSubscription и Subscription удалены

  • Func1Function

  • Func2BiFunction

    Оператор
  • 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 */);