我一直在查看RxJava1 https://github.com/ReactiveX/RxJava/releases和RxJava2 https://github.com/ReactiveX/RxJava/wiki/Reactive-Streams的文档,看起来唯一不同的是RxJava 2有Java Stream。
还有其他不同吗?。
我一直在使用1.1.3版本,但由于我们已经在代码中使用了Java 8流,因此我不确定它是否值得转移到RxJava2
问候。
答案 0 :(得分:23)
RxJava 1.x和2.x都设计为Java 6+,因此我们无法在任何版本中支持Java 8 Streams。决定继续支持无数的Android设备和版本,这些设备和版本不会更新到兼容Java 8的运行时。如果您需要Java 8支持,请考虑使用Pivotal中的Reactor-Core。
两者之间的主要区别在于2.x直接针对Reactive-Streams SPI,为此,它已经从头开始完全重写。我们目前处于开发预览模式,您可以按照2.x branch readme。
中的说明进行访问完全重写2.x大大提高了我们的内存消耗和性能; here is a benchmark比较各种版本和库。
在API表面上,我们计划继续支持1.x中存在的所有运算符,并且可能会在新的数据库中使用新的运算符延长几年,然后才能支持1.x.
由于2.x是一种新架构,因此必须更新许多依赖库(例如,Retrofit);这可能不会在今年8月底之前发生,也可能需要几个月才能赶上。 Here is the wiki page包含差异的亮点。
答案 1 :(得分:18)
以下RxJava2和RxJava1之间的区别:
为了允许RxJava 1.x和RxJava 2.x并排,RxJava 2.x位于maven坐标io.reactivex.rxjava2:rxjava:2.x.y
下,类可以在io.reactivex
下方访问。< / p>
从1.x切换到2.x的用户必须重新组织他们的导入,但要小心。
onCompleted
- &gt; onComplete
- 没有尾随d
CompositeSubscription
- &gt;已移除CompositeDisposable
- CompositeDisposable
CompositeSubscription
和Subscription
Func1
- &gt; Function
Func2
- &gt; BiFunction
limit
运算符已被删除 - 在RxJava2中使用take
RxJava 2.0已在Reactive-Streams规范之上从头开始完全重写。规范本身已经从RxJava 1.x发展而来,为反应系统和库提供了一个共同的基线。
由于Reactive-Streams具有不同的体系结构,因此它要求对一些众所周知的RxJava类型进行更改。
与RxJava1相比,RxJava2具有更好的性能和低内存使用率
[来源: https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0]
答案 2 :(得分: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 */);