RxJava1和RxJava2之间的区别

22

2
我认为独特的区别在于它使用了Java 8中引入的新Java Streams API - Andreas
1
你有没有读第二个链接提供的内容?“RxJava 1.x并没有直接实现Reactive Streams API”,而“RxJava 2.x将直接针对Reactive Streams API进行目标设置”。这听起来对我来说是一个很大的区别:从不直接实现API到直接实现API。 - Andreas
1
是的,我看过了,但我只是想确认是否还有其他区别。 - paul
1
你在问题中最初的假设是唯一的变化是需要Java 8+。这怎么可能与改变API相同呢?你说的话毫无意义。你想要什么?每个更改的详细清单?比较源代码来看吧。 - Andreas
1
我并不是在说那个,因为我并不确定。我只是想说,区别远远不止需要Java 8这么简单。如果那不是你的问题,你应该修改你的问题,表达你真正想问的。 - Andreas
显示剩余2条评论
3个回答

30

RxJava 1.x和2.x均为Java 6+设计,因此无法在任何版本中支持Java 8 Streams。这是为了支持众多不会更新到Java 8兼容运行时的Android设备和版本。如果需要Java 8支持,请考虑使用Pivotal的Reactor-Core

两者之间的主要区别在于,2.x直接针对Reactive-Streams SPI进行定位,因此它已完全重写。我们目前正处于开发预览模式,可以按照2.x分支自述文件中所述进行访问。

2.x的完全重写极大地改进了我们的内存消耗和性能;这里有一个基准测试,比较了各个版本和库。

在API表面上,我们计划继续支持所有在1.x中存在的操作符,并可能在数年后扩展两个版本的新操作符,然后结束对1.x的支持。

由于2.x是一种新的架构,许多依赖库(例如Retrofit)也必须进行更新,这可能早于本年8月底不会发生,或者可能需要几个月才能追上。这里是包含差异亮点的维基页面Here is the wiki page


24

我已经在 我的示例项目 - 链接 中实现了 RxJava2

RxJava2 和 RxJava1 之间的不同之处如下:

  1. 为了允许同时存在 RxJava 1.x 和 RxJava 2.x,RxJava 2.x 的 maven 坐标为 io.reactivex.rxjava2:rxjava:2.x.y,类可在 io.reactivex 下访问。

  2. 从 1.x 切换到 2.x 的用户必须重新组织导入,但要小心。

  3. onCompleted -> onComplete - 没有尾部 d

  4. CompositeSubscription -> CompositeDisposable - CompositeSubscriptionSubscription 已被移除,使用 CompositeDisposable

  5. Func1 -> Function

  6. Func2 -> BiFunction

  7. limit 运算符已被移除 - 在 RxJava2 中使用 take

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 ]


2

其中一个主要区别适用于.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 */);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接