1、package更改
rx1包名由原来的rx.xxx更改为io.reactivex.xxx,并且在同一个module之下,rx1和rx2是不兼容的。
2、背压支持
RxJava在1.0只有一个个观察者模式,只能部分支持背压:
- Observable(被观察者)/Observer(观察者)
- Observable(被观察者)/Subscriber(观察者)
RxJava在2.0出现了两个观察者模式,新增Flowable支持背压,而Observable不支持背压:
- Observable(被观察者)/Observer(观察者)
- Flowable(被观察者)/Subscriber(观察者)
注:背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略,简而言之,背压是流速控制的一种策略。
3、NULL值支持
rx1.x是可以支持NULL值的
Observable.just(null);
Single.from(null);
rx2.x是不支持NULL值的
Observable.just(null)
.subscribe(System.out::println, Throwable::printStackTrace);
Single.just(null)
.subscribe(System.out::println, Throwable::printStackTrace);
4、ActionN 和 FuncN 改名
ActionN 和 FuncN 遵循Java 8的命名规则。
其中,Action0 改名成Action,Action1改名成Consumer,而Action2改成BiConsumer,而Action3 - Action9都不再使了,ActionN改成Consumer<Object[]>,新的Action都增加抛出异常处理
同样,Func改名成Function,取消了Func0的方法,Func2改名成BiFunction,Func3 - Func9 改成 Function3 - Function9,FuncN 改为 Function<Object[], R>,新的Function都增加抛出异常处理
5、Subscription改为Disposable
rx1.x的Subscription
public final Subscription subscribe(final Action1<? super T> onNext)
rx2.x返回值的是Disposable,由于已经存在了 org.reactivestreams.subscription 这个类,为了避免名字冲突将原先的 rx.Subscription 改名为 io.reactivex.disposables.Disposable
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError)
注意:Subscription 不再有订阅subcribe和unSubcribe的概念。
6、Observer和Subscriber更改
rx2.x中Observable不在支持Subscriber方法,改由Flowable支持Subscriber,而Observable只支持Observer方法。
新增onSubscribe方法,Observer提供了Disposable参数,而Subscriber提供了Subscription参数,向观察者提供以同步和异步方式取消与Observable的连接的方法。
rx1.x的Observer
public interface Observer<T> {
void onCompleted();
void onError(Throwable e);
void onNext(T t);
}
rx2.x的Observer
public interface Observer<T> {
void onSubscribe(Disposable d);//
void onNext(T value);
void onError(Throwable e);
void onComplete();
}
public interface Subscriber<T> {
void onSubscribe(Subscription s);//相当于onStart方法
void onNext(T value);
void onError(Throwable e);
void onComplete();
}
7、Observable.OnSubscribe改为ObservableOnSubscribe
rx1.x写法
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
}
});
rx2.x写法
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> e) throws Exception {
}
});
8、ObservableOnSubscribe 中使用 ObservableEmitter 发送数据给 Observer
ObservableEmitter可以理解为发射器,这个就是用来发出事件的,它可以发出三种类型的事件,通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出next事件、complete事件和error事件。emitter的onComplete()调用后,Consumer不再接收任何next事件。
9、Observable.Transformer 变成 ObservableTransformer
rx1.x的写法
public synchronized <T> Observable.Transformer<T, T> bindToLifeCycle() {
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> tObservable) {
if (lifecycleSubject == null) return upstream;
return upstream.takeUntil(lifecycleSubject);
}
};
}
rx2.x的写法
public synchronized <T> ObservableTransformer<T, T> bindToLifeCycle() {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
if (lifecycleSubject == null) return upstream;
return upstream.takeUntil(lifecycleSubject);
}
};
}
同时新增Flowable的写法
public synchronized <T> FlowableTransformer<T, T> bindToLifeCycle() {
return new FlowableTransformer<T, T>() {
@Override
public Publisher<T> apply(Flowable<T> upstream) {
if (lifecycleSubject == null) return upstream;
return upstream.takeUntil(lifecycleSubject);
}
};
}
10、from变更
rx1.x中统一使用from方法名,但rx2.x不在使用from,而是已from+参数类型名命名
rx2.x新增了Publisher参数的from方法。
rx1.0
public static <T> Observable<T> from(T[] array)
public static <T> Observable<T> fromCallable(Callable<? extends T> func)
public static <T> Observable<T> from(Iterable<? extends T> iterable)
public static <T> Observable<T> from(Future<? extends T> future)
rx2.0
public static <T> Observable<T> fromArray(T... items)
public static <T> Observable<T> fromCallable(Callable<? extends T> supplier)
public static <T> Observable<T> fromFuture(Future<? extends T> future)
public static <T> Observable<T> fromIterable(Iterable<? extends T> source)
public static <T> Observable<T> fromPublisher(Publisher<? extends T> publisher)
11、blocking变更
rx1.x
.toBlocking().firstOrDefault(defaultValue)
rx2.x
.blockingFirst(defaultValue);
在项目升级RxJava中暂时遇到这些变更,具体RxJava2.x的使用请去github查看https://github.com/ReactiveX/RxJava
RxJava1升级到RxJava2的注意事项的更多相关文章
-
Rxjava1升级Rxjava2踩坑一记
Rxjava1升级Rxjava2坑 共存问题 通常情况下,如果我们希望在一个模块中既想使用rxjava1又想使用rxjava2,这个时候在运行的时候会出现一下报错: ... APK META/-INF ...
-
如何从RxJava升级到RxJava2
如何从RxJava升级到RxJava2. RxJava2已经推出有一年半的时间,由于之前RxJava已经在现有项目中广泛使用,而RxJava2在除了很多命名外并没有太多革新,所以相信有很多人跟我一样都 ...
-
Android Studio从2.3升级到3.1注意事项
原文:https://blog.csdn.net/lithiumyoung/article/details/80111111 Android Studio从2.3升级到3.1注意事项 项目根目录下的b ...
-
Android RxJava1.X升级到RxJava2.X笔记
简书地址 http://www.jianshu.com/p/2badfbb3a33b 描述 RxJava 1.X RxJava 2.X package包名 rx.xxx io.reactivex.xx ...
-
如何升级Ceph版本及注意事项
升级软件版本在日常运维中是一个常见操作. 本文分享一下Ceph版本升级的一些经验. 一般升级流程和注意如下: 1. 关注社区Release notes 和 ceph-user邮件订阅列表,获取社区发 ...
-
gradle tool升级到3.0注意事项
Gradle版本升级 其实当AS升级到3.0之后,Gradle Plugin和Gradle不升级也是可以继续使用的,但很多新的特性如:Java8支持.新的依赖匹配机制.AAPT2等新功能都无法正常使用 ...
-
python2.7升级到python3.6注意事项
python3.6下载地址:https://www.python.org/downloads/source/ 1.安装依赖包:gcc openssl-devel.zlib-devel.readli ...
-
必读的 Android 文章
必读的 Android 文章 掘金官方 关注 2017.06.07 13:58* 字数 25218 阅读 8782评论 2喜欢 218 写给 Android 开发者的混淆使用手册 - Android ...
-
Lodop提示安装或升级的注意事项
LODOP的LodopFuncs.js文件里,自动判断浏览器类型提示下载哪个,根据版本号比较判断提示升级.此文章是以前写的,图示可能过旧,新版提示不同,但是LodopFuncs.js里各个方面变动不大 ...
随机推荐
-
使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
-
用JS做一个简单的电商产品放大镜功能
使用js制作一个简单的产品放大图 购物网站的产品页经常会放有一个产品展示图区.该图区有一个功能就是产品图的放大功能,移动左侧的焦点区域,可以放大细节部分观看,详情如下图.实现该功能的方法也非常简单. ...
-
工作中一个简单的shell程序
下面是工作中用到的链接数据库的shell程序. #!/bin/bash ] ; then echo "prase is wrong ,please check first" exi ...
-
Ubuntu 中安装 NetBeans IDE
NetBeans 8.2 刚刚发布,如果你还没有安装的话,这篇简短的教程将会演示如何在 Ubuntu 系统上快速的安装.对安装 NetBeans 需要帮助的开发者来说,这往篇文章会是不错的指导. 给那 ...
-
SQL localdb 连接字符串
http://blog.csdn.net/greystar/article/details/47699797 原来SQL 2012 下连接LOCALDB,字符串为: Data Source=(Loca ...
-
Network Saboteur(搜索)
Network Saboteur POJ2531 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10351 Accept ...
-
淘宝镜像 cnpm 不是内部命令
升级npm之后安装淘宝镜像,然后一直提示不是内部命令,网上查看文章 http://blog.csdn.net/fighting_2017/article/details/76979844,发现是路径问 ...
-
学习pthreads,给线程传递多个参数
上篇博文中,boss线程给其他线程传递的只有一个参数,那么假如是多个参数呢?怎么传递呢?或许你会有这样的疑问,带着这个疑问,我们进入本文的世界,这里传递多个参数,采用结构体,为什么呢?因为结构体里可以 ...
-
discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)
在应用 -> 积分商城 -> 常用设置 中添加 商场首页排序方式 的背景颜色修改功能 步骤: 1.找到并打开此页面对应的模板source\plugin\aljsc\template\set ...
-
Yolov3参数解释以及答疑
目录 参数解析 训练答疑 参数解析 [net] #Testing #batch=1 //test:一次一个图片 #subdivisions=1 #Training batch=32 //一次迭代送 ...