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<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 ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 10,923评论 7 62
  • 把它当做陌生人再一次去认识 环境集成 首先废话不多说,先把Rxjava集成到我们项目中来。 rxjava1和rxj...
    super_shanks阅读 8,504评论 3 16
  • 最近项目里面有用到Rxjava框架,感觉很强大的巨作,所以在网上搜了很多相关文章,发现一片文章很不错,今天把这篇文...
    Scus阅读 11,789评论 2 50
  • 转一篇文章 原地址:http://gank.io/post/560e15be2dca930e00da1083 前言...
    jack_hong阅读 4,464评论 0 2
  • 地铁上,看到两个胖女孩,身子可以占一个半座位的那种胖。 同大部分姑娘一样,一位穿着浅色牛仔裤,上身...
    未死知更鸟阅读 4,640评论 4 51