美文网首页安卓
Rxjava1改为Rxjava2

Rxjava1改为Rxjava2

作者: 李庆雪 | 来源:发表于2017-04-07 15:31 被阅读1000次

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

    相关文章

      网友评论

        本文标题:Rxjava1改为Rxjava2

        本文链接:https://www.haomeiwen.com/subject/pojhattx.html