项目最一开始用的是Rxjava1,这几天没什么事情就直接换成了Rxjava2,有几个点总结下.
添加依赖
Android端使用RxJava需要依赖新的包名:
//RxJava的依赖包
compile 'io.reactivex.rxjava2:rxjava:2.0.8'
//RxAndroid的依赖包
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
//RxJava2 Retrofit Adapter
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
null
- RxJava1.x中,支持 null 值,如下代码所示:
Observable.just(null);
- RxJava 2.0不再支持 null 值,如果传入一个null会抛出 NullPointerException
ActionN 和 FuncN 改名
Action0 改名成Action
Action1改名成Consumer
Action2改名成了BiConsumer
Action3 - Action9都不再使用了
ActionN变成了Consumer<Object[]>。
同样,Func改名成Function
Func改名成BiFunction
Func3 - Func9 改名成 Function3 - Function9
FuncN 由 Function<Object[], R> 取代
Observable.OnSubscribe 变成 ObservableOnSubscribe
ObservableOnSubscribe 中使用 ObservableEmitter 发送数据给 Observer
ObservableEmitter 可以理解为发射器,是用来发出事件的,它可以发出三种类型的事件,通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)可以分别发出next事件、complete事件和error事件。 如果只关心next事件的话,只需单独使用onNext()即可。
需要特别注意,emitter的onComplete()调用后,Consumer不再接收任何next事件
原先RxJava1的写法:
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello");
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
现在的写法:
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("hello");
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
Subscription 改名为 Disposable
CompositeSubscription改为CompositeDisposable
当Activity退出时, Disposable要销毁
可以用Rxjava中内置了一个容器CompositeDisposable, 每当我们得到一个Disposable时就调用CompositeDisposable.add()将它添加到容器中, 在退出的时候, 调用CompositeDisposable.clear() 即可.类似于之前的取消订阅.
Retrofit对于Rxjava适配的更改
RxJavaCallAdapterFactory.create()改为RxJava2CallAdapterFactory.create()