RxJava2.0 从入门到放弃?

来源:互联网 发布:linux 驱动编写步骤 编辑:程序博客网 时间:2024/05/21 11:30

RxJava2.0 从入门到放弃?

我从2016年初的时候听说RxJava,百度搜了一下是什么鬼,有人说搞安卓的2015年没学这个的算是白混了,好吧我的确是白混了,一直计划着要学习如何装逼使用RxJava,然而作为一个懒癌患者,拖到了RxJava2.0出现,纳尼,我特么还没开始学习1.0呢,这就整出了2.0,又落后了。时不我待,重新计划了一次,然并卵。2017年真的不能再拖了,于是决心真的开始搞了,不知道会不会烂尾。(欢迎各大神加群586027808指导批评教育)



  • RxJava是什么?(并不是专业回答,我只是吹水)

度娘了一番,是什么,那就是 异步异步异步,简洁简洁简洁
响应式编程
可观测的数据事件流

开始

开始之前,附上官方github地址:
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
gradle引入依赖:

compile ‘io.reactivex.rxjava2:rxjava:2.0.6’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’

其实RxJava1.0和2.0是有点区别的,具体什么区别,后续可能会说到,因为我并不会1.0,直接学习2.0,就不在乎什么鬼了,踩到坑再补。

基础

RxJava的几个东西

Observable
Observer
Flowable
Subscriber

饭一口一口吃,先说Observable(被观察者) 和Observer(观察者)
Observable“生产”实体,Observer“消费”实体。

    //创建Observable 基本用法1,通过create直接创建    Observable<String> observable=Observable.create(new ObservableOnSubscribe<String>() {            //这是一个自定义的数据发射器                  @Override            public void subscribe(ObservableEmitter<String> e) throws Exception {                //每一次调用,都会使observer响应                e.onNext("1");                e.onNext("2");                e.onNext("3");                //onComplete 会使observe回调对应的方法,同理onError                e.onComplete();                //在上一行执行了onComplete ,数据依旧会继续发射,但是observe不会进行任何响应                e.onNext("4");                //这里单独说,再一次订阅中,onError和onComplete可以都没有,但是不能都有,是互斥的                //onComplete可以写多次,并不会报错,但从第一次之后发射出去的数据observe都不会响应                //但是onError不能写多次,会在发射过程中直接抛异常                //e.onError(null);                //e.onComplete();            }        });        //基本用法2 直接发射一组定义好的数据源        //observable=Observable.just("1","2","3","4","5");        ArrayList<String> arrayList=new ArrayList<>();        arrayList.add("1");        arrayList.add("2");        arrayList.add("3");        arrayList.add("4");        //基本用法2 直接发射        //observable=Observable.fromIterable(arrayList);        //创建Observer 用于消费数据        Observer<String> observer=new Observer<String>() {            @Override            public void onSubscribe(Disposable d) {               //在接收数据前会执行,Disposable 可用于停止接收数据,但停止接收数据只是让observe不处理               //observable依旧会继续发射数据            }            //每一次ObservableEmitter 发射数据时,onNext都会回调,直到onComplete或者onError后            @Override            public void onNext(String s) {                Log.i("msg",s);            }            @Override            public void onError(Throwable e) {            }            @Override            public void onComplete() {                Log.i("msg","onComplete");            }        };        //建立订阅关系 只有开始订阅后,observable才会开始发射数据,subscribe有多个重载方法,可以无参纯发射        observable.subscribe(observer);

上面的代码没有任何实际意义,主要是让大家初步理解工作机制,后面再逐步学习操作符,背压,线程调度等

再使用Flowable和Subscriber来个链式装逼写法

    //与1.0不同 Flowable是支持背压(这是什么鬼,后面再说,简单来讲就是处理"生产者"产能过剩的问题)    Flowable.just(1,2,3,4)//注意这是4个普通的int值              .subscribe(new Subscriber<Integer>() {                  Subscription sub;                  //在订阅开始后会先执行这个方法                  @Override                  public void onSubscribe(Subscription s) {                      Log.i("msg","onSubscribe start");                      //sub=s;                      /**这里要注意,此处的意义是告知Flowable我要多少个数据,如果不写,onNext是不会有                      回调的,直到数据发送结束,可以一次性在这说明要多少,也可以只要一个,剩下的可以在                      onNext中进行申请,如果申请的数量小于总数,是不会触发最后的onComplete方法的                      本例中要触发onComplete,这里就必须要大于等于4                      */                      s.request(1);                      Log.i("msg","onSubscribe end");                  }                  @Override                  public void onNext(Integer integer) {                      Log.i("msg","onNext "+integer.toString());                      //sub.request(1); //可以在此处再次请求释放数据                  }                  @Override                  public void onError(Throwable t) {                  }                  @Override                  public void onComplete() {                      Log.i("msg","onComplete");                  }              });

以上这些….
这里写图片描述

其实我想盗图来说明点问题的,但是略麻烦,等说明操作符差异的时候再用图解
临时收工 未完待续

0 0
原创粉丝点击