Rxjava1改为Rxjava2

项目最一开始用的是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

同样,Func改名成Function
Func改名成BiFunction
Func3 - Func9 改名成 Function3 - Function9
FuncN 由 Function 取代

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() {
            @Override
            public void call(Subscriber subscriber) {
                subscriber.onNext("hello");
            }
        }).subscribe(new Action1() {
            @Override
            public void call(String s) {
                System.out.println(s);
            }
        });

现在的写法:

        Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                e.onNext("hello");
            }
        }).subscribe(new Consumer() {
            @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()

你可能感兴趣的:(Rxjava1改为Rxjava2)