RxJava 版本1.0 和 版本2.0的比较

现在RxJava已经是2.0以上版本了,看到很多资料上还在讲1.0的版本,因此做个简单的笔记,供大家参考,不足之处请兄弟们留言我添加完善

1、概述

RxJava(Reactive Extensions Java),RxJava基于观察者模式,是一种响应式编程模型,目的是提供统一的接口帮助开发者便捷的处理异步数据流。

RxJava本质上是一个异步库,使用简洁的逻辑处理繁琐复杂任务。

 

2、观察者模式

观察者模式涉及到2主角

1)Observable :被观察者

2)Observer:观察者

被观察者中有一个观察者的列表,当被观察者发生变化的时候回根据这张表一一通知观察者。

d19a178acb3fb0c6976d6a5db104230322b.jpg

 

3、1.0和2.0的区别 

3.1、背压

1.0背压集中在Obserable中处理,导致有点混乱,。

2.0版本把对背压的处理提出来了,出现了两种观察者模式:

Observable(被观察者)/Observer(观察者) 不支持背压(Backpressure)
Flowable(被观察者)/Subscriber(观察者) 支持背压(Backpressure)

Flowable是新增的

3.2、操作符修改

1.0版本

Action这类接口命名Action0、Action1…(数字代表可接受的参数),现在做出了改动

1.x2.x
Action0Action
Action1Consumer
Action2BiConsumer
... 
ActionN 

Funx修改

1.x2.x
Func

Function<T, R>

A functional interface that takes a value and returns another value

Func2BiFunction<T1, T2, R>
Func3 ~ Func9

Function3 ~ Function9

 

Function3<T1, T2, T3, R>

Function9<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>

FuncNFunction<T, R>

First()

1.x2.x
firstfirstElement
first(Func1)filter(predicate).first()
firstOrDefault(T)first(T)
firstOrDefault(Func1, T)first(T)
  

 

3.3、线程调度 Schedulers

2.0去掉了Schedulers.immediate()、Schedulers.test()

 

3.4 、创建被观察者的变化

1.0版本 
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("hello");
        subscriber.onNext("hello");
        subscriber.onNext("hello");
        subscriber.onCompleted();
    }
});

2.0版本 
变化点1:create参数Observable.OnSubscribe改为ObservableOnSubscribe 
变化点2:回到函数call(Subscriber)改为 subscribe(ObservableEmitter) 
变化点3:可发射三种事件:emitter.onNext(T value)、onComplete、onError(Throwable e)
Observable<Integer> observable=Observable.create(new ObservableOnSubscribe<Integer>() {

           @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
         
                e.onNext("hello!");
                e.onNext("world!");
                e.onNext("are you ok!");
                e.onError(new Throwable("error"));
                e.onComplete();
            }
        });

3.5、创建观察者的变化

1.0 中创建观察者Observer有两种方式

方式1:采用 Observer 接口

    Observer<String> observer = new Observer<String>() {
        @Override
        public void onNext(String s) {
            
        }

        @Override
        public void onCompleted() {
           
        }

        @Override
        public void onError(Throwable e) {
            
        }
    };

方式2:采用Subscriber接口创建, 其对 Observer接口进行了扩展,增加了onStart()、unSubscribe()

    Subscriber<String> subscriber = new Subscriber<String>() {
        @Override
        public void onNext(String s) {
            
        }

        @Override
        public void onCompleted() {
            
        }

        @Override
        public void onError(Throwable e) {
            
        }
    };

2.0 创建观察者Observer
变化点1:增加了回调方法onSubscribe(),其最先被调用,可用来做一些初始化的工作
变化点2:onCompleted()改成 onComplete()
    
Observer<Integer> observer = new Observer<Integer>() {

        @Override
        public void onSubscribe(Disposable d) {
            
        }

        @Override
        public void onNext(Integer value) {
        }

        @Override
        public void onError(Throwable e) {
        }

        // 注意
        @Override
        public void onComplete() {
        }
    }

 

3.6、接口都增加了异常抛出

public interface Action {
    /**
     * Runs the action and optionally throws a checked exception.
     * @throws Exception if the implementation wishes to throw a checked exception
     */
    void run() throws Exception;
}


public interface BiConsumer<T1, T2> {

    /**
     * Performs an operation on the given values.
     * @param t1 the first value
     * @param t2 the second value
     * @throws Exception on error
     */
    void accept(T1 t1, T2 t2) throws Exception;
}

public interface Function<T, R> {
    /**
     * Apply some calculation to the input value and return some other value.
     * @param t the input value
     * @return the output value
     * @throws Exception on error
     */
    R apply(T t) throws Exception;
}


/**
 * A functional interface (callback) that accepts a single value.
 * @param <T> the value type
 */
public interface Consumer<T> {
    /**
     * Consume the given value.
     * @param t the value
     * @throws Exception on error
     */
    void accept(T t) throws Exception;
}

 

3.7 from 变化

from -> fromArray


1.0版本

private void doFrom() {
       

        String[] items = {"item1", "item2", "item3"};
        Observable.from(items)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });

    }

2.0版本
private void doFrom() {
        String[] items = {"item1", "item2", "item3"};
        Observable.fromArray(items).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                System.out.println(s);
            }
        });

    }

 

转载于:https://my.oschina.net/goboy/blog/2046455

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值