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
同样,Func改名成Function,取消了Func0的方法,Func2改名成BiFunction,Func3 - Func9 改成 Function3 - Function9,FuncN 改为 Function
5、Subscription改为Disposable
rx1.x的Subscription
public final Subscription subscribe(final Action1 onNext)
rx2.x返回值的是Disposable,由于已经存在了 org.reactivestreams.subscription 这个类,为了避免名字冲突将原先的 rx.Subscription 改名为 io.reactivex.disposables.Disposable
public final Disposable subscribe(Consumer onNext, Consumer 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 {
void onCompleted();
void onError(Throwable e);
void onNext(T t);
}
rx2.x的Observer
public interface Observer {
void onSubscribe(Disposable d);//
void onNext(T value);
void onError(Throwable e);
void onComplete();
}
public interface Subscriber {
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
rx2.x写法
Observable.create(new ObservableOnSubscribe
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 Observable.Transformer bindToLifeCycle() {
return new Observable.Transformer() {
@Override
public Observable call(Observable tObservable) {
if (lifecycleSubject == null) return upstream;
return upstream.takeUntil(lifecycleSubject);
}
};
}
rx2.x的写法
public synchronized ObservableTransformer bindToLifeCycle() {
return new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
if (lifecycleSubject == null) return upstream;
return upstream.takeUntil(lifecycleSubject);
}
};
}
同时新增Flowable的写法
public synchronized FlowableTransformer bindToLifeCycle() {
return new FlowableTransformer() {
@Override
public Publisher apply(Flowable 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 Observable from(T[] array)
public static Observable fromCallable(Callable func)
public static Observable from(Iterable iterable)
public static Observable from(Future future)
rx2.0
public static Observable fromArray(T... items)
public static Observable fromCallable(Callable supplier)
public static Observable fromFuture(Future future)
public static Observable fromIterable(Iterable source)
public static Observable fromPublisher(Publisher publisher)
11、blocking变更
rx1.x
.toBlocking().firstOrDefault(defaultValue)
rx2.x
.blockingFirst(defaultValue);
在项目升级RxJava中暂时遇到这些变更,具体RxJava2.x的使用请去github查看https://github.com/ReactiveX/RxJava