RXjava(一)

rxjava 响应式变成,自然好处多多在,这里不做更多解释。

Rxjava、RxAndroid

Rxjava : https://github.com/ReactiveX/RxJava

RxAndroid : https://github.com/ReactiveX/RxAndroid

RxAndroid 最新版本查看

这里使用的版本为:

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.2'

笔记

  1. rxjava1重要的元素
    Observable 被观察者,通过create方法创造一个可被观察的序列,通过subscribe 去注册一个观察者
    Observer 观察者 ,用来接收数据,作为Observable的subscribe 方法的参数
    subscription 订阅 ,用于描述被观察者和观察者之间的关系,用于取消订阅和获取当前的订阅状态
    onSubscribe 当订阅时,触发此接口调用,向订阅者发射数据
    subscriber 实现了Observer和Subscription,只有自己才能阻止自己

UML图


image.png

2.背压
概念:

  • 异步环境下产生的问题
  • 发送和处理速度不统一
  • 一种流速控制解决策略

3.Rxjava2

  • Observable
    被观察者,不支持背压;通过Observable 创建一个可观察的序列(create方法);通过subscribe去注册一个观察者

  • Observe
    观察者 ,用来接收数据,作为Observable的subscribe 方法的参数

  • Dispasable
    和RxJava1的Subscription的作用相当,用于取消订阅和获取当前的订阅状态

  • OnSubscrible
    ObservableOnSubscrible 和RxJava1的OnSubscrible一样, 当订阅时,触发此接口调用,向订阅者发射数据

  • Emitter
    发射数据的接口和Observer的方法类似,本质是对Observer和Subscriber的包装

  • UML 图


    image.png
//无背压
Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter e) throws Exception {
                        if (!e.isDisposed()) {
                            e.onNext("1");
                            e.onNext("2");
                            e.onNext("3");
                            e.onNext("4");
                            e.onNext("5");
                            e.onNext("6");
                            e.onNext("7");
                            e.onNext("8");
                            e.onNext("9");
                            e.onNext("10");
                            e.onComplete();
                        }
                    }
                }).subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        System.out.println("onSubscribe");
                    }

                    @Override
                    public void onNext(String value) {
                        System.out.println("onNext:" + value);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {
                        System.out.println("onCompleted");
                    }
                });

//有背压
 Flowable.create(new FlowableOnSubscribe() {
                    @Override
                    public void subscribe(FlowableEmitter e) throws Exception {
                        if (!e.isCancelled()) {
                            e.onNext("test");
                            e.onComplete();
                        }
                    }
                }, BackpressureStrategy.DROP).subscribe(new Subscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        s.request(Long.MAX_VALUE);
                        System.out.println("onSubscribe");
                    }

                    @Override
                    public void onNext(String s) {
                        System.out.println("onNext:" + s);
                    }

                    @Override
                    public void onError(Throwable t) {

                    }

                    @Override
                    public void onComplete() {
                        System.out.println("onCompleted");
                    }
                });
  • Flowable
    易流动的被观察者,支持背压,通过Flowable创建一个可观察的序列(create方法),,通过subscribe去注册一个观察者

  • Subscriber
    单独接口和Observer的方法类似,作为Flowable的方法的参数

  • subscription
    订阅和RxJava不同,支持背压,request强制拉去的方法

  • FlowableOnSubscribe
    当订阅时会触发此接口调用,在内部实际是向观察者发射数据

  • Emitter
    发射数据的接口和Observer的方法类似,本质是对Observer和Subscriber的包装

-UML图


image.png

你可能感兴趣的:(RXjava(一))