RxJava

rxjava是响应式编程思想在java语言的实现。要理解它,你只要把握住两点就可以,观察者模式和异步。

观察者模式

observable 被观察者

Observable switcher=Observable.create(new Observable.OnSubscribe(){}
其中还会有just和from的写法。

observer  观察者

在rxjava中Subscriber是观察者的实现类,类似的还有action类(参数个数)

订阅

由于被观察者产生事件,是事件的起点,那么开头就是用Observable这个主体调用来创建被观察者,产生事件,为了保证流式API调用规则,就直接让Observable作为唯一的调用主体,一路调用下去。这点区别于传统的观察者的写法。

流程图如下

RxJava_第1张图片
图片发自App

流程图代码实现如下

//创建被观察者,是事件传递的起点

Observable.just("On","Off","On","On")

        //这就是在传递过程中对事件进行过滤操作

        .filter(new Func1() {

                    @Override

                    public Boolean call(String s) {

                        return s!=null;

                    }

                })

        //实现订阅

        .subscribe(

                //创建观察者,作为事件传递的终点处理事件

new Subscriber() {

@Override

public void onCompleted() {

Log.d("DDDDDD","结束观察...\n");

}

                        @Override

                        public void onError(Throwable e) {

                            //出现错误会调用这个方法

                        }

                        @Override

                        public void onNext(String s) {

                            //处理事件

                            Log.d("DDDDD","handle this---"+s)

                        }

        );

   

rxjava的骨架

创建被观察者,产生事件

设置事件传递过程中的过滤,合并,变换等加工操作。

订阅一个观察者对象,实现事件最终的处理

Tips: 当调用订阅操作(即调用Observable.subscribe()方法)的时候,被观察者才真正开始发出事件。

rxjava操作符

操作符是rxjava的精华所在,可以在事件传递单位过程中做很多事情。

map

比如被观察者产生的事件中只有图片文件路径;,但是在观察者这里只想要bitmap,那么就需要类型变换。

Observable.just(getFilePath()

            //使用map操作来完成类型转换

            .map(new Func1() {

              @Override

              public Bitmap call(String s) {

                //显然自定义的createBitmapFromPath(s)方法,是一个极其耗时的操作

                  return createBitmapFromPath(s);

              }

          })

            .subscribe(

                //创建观察者,作为事件传递的终点处理事件

new Subscriber() {

@Override

public void onCompleted() {

Log.d("DDDDDD","结束观察...\n");

}

                        @Override

                        public void onError(Throwable e) {

                            //出现错误会调用这个方法

                        }

                        @Override

                        public void onNext(Bitmap s) {

                            //处理事件

                            showBitmap(s)

                        }

                    );

   

flatmap

异步

RxJava_第2张图片
图片发自App

实际上线程调度只有subscribeOn()和observeOn()两个方法。对于初学者,只需要掌握两点:

subscribeOn()它指示Observable在一个指定的调度器上创建(只作用于被观察者创建阶段)。只能指定一次,如果指定多次则以第一次为准

observeOn()指定在事件传递(加工变换)和最终被处理(观察者)的发生在哪一个调度器。可指定多次,每次指定完都在下一步生效。

总结

它就是在观察者模式的骨架下,通过丰富的操作符和便捷的异步操作来完成对于复杂业务的处理。

你可能感兴趣的:(RxJava)