美文网首页
RXjava(一)

RXjava(一)

作者: 火星局 | 来源:发表于2018-06-04 13:40 被阅读0次

    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<String>() {
                        @Override
                        public void subscribe(ObservableEmitter<String> 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<String>() {
                        @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<String>() {
                        @Override
                        public void subscribe(FlowableEmitter<String> e) throws Exception {
                            if (!e.isCancelled()) {
                                e.onNext("test");
                                e.onComplete();
                            }
                        }
                    }, BackpressureStrategy.DROP).subscribe(new Subscriber<String>() {
                        @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(一)

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