整理整理Rxjava

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013519084/article/details/82022894

一、什么是Rxjava?

RxJava is a Java VM implementation of ReactiveX (Reactive Extensions): a library for composing asynchronous and event-based programs by using observable sequences

一个在JVM上使用可观察的事务来组成的异步的、基于事件的程序的库

二、 Rxjava支持哪些语言?

支持java6及以上版本,还有一些基于JVM的语言比如: Groovy,Clojure,JRuby,Kotlin和Scala。

三、Andorid开发者使用:

添加依赖: 

compile 'io.reactivex.rxjava2:rxjava:2.2.0'

四、开始使用Rxjava:

4.1、创建被观察者对象:

     4.1.1、 从已有数据结构中创建被观察者对象:

                 

Observable<String> o=Observable.fromArray("a","b","c");
        Observable<String> o2=Observable.just("one object");

使用成型例子Example1:

  private void hello(String... names)
    {
        Observable.fromArray(names).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                Log.i("onNext","Hello" + s + "!");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }
hello("Ben", "George");

 运行结果: 

 4.1.2、使用create创建Observable被观察者对象

  //创建被观察者对象
        Observable<String> stringObservable=Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                Log.i(tag,"发送线程:"+Thread.currentThread().getName());
                Log.i(tag,"发送:"+"hello");
                emitter.onNext("hello");
                Log.i(tag,"发送:"+"world");
                emitter.onNext("world");
                emitter.onComplete();
            }
        });
  stringObservable.subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                Log.i(tag,"接收线程:"+Thread.currentThread().getName());
                Log.i(tag,"接收:"+s);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
               Log.i(tag,"onComplete");
            }
        });

其中ObservableEmitter是事件的发送器,可以发送多个onNext()方法,一旦发送onComplete(),onError()事件后,后续的事件将不会发送

4.1.3、使用just依次遍历just里面的项:

  Observable.just(3,2,1).subscribe(i->{
            Log.i(tag,"收到整型数据:"+i);
        });

运行结果:

4.2、将Observable被观察者数据转化为你更需要的数据类型,然后去订阅: 使用map函数方法:

    Observable.just(3,2,1).map(new Function<Integer,Integer>() {
            @Override
            public Integer apply(Integer integer) throws Exception {
                if(integer==1)
                {
                    return integer;
                }
                return 0;
            }
        }).subscribe(i->{
            Log.i(tag,"收到整型数据:"+i);
        });

运行结果:

4.3、改变发送事件变化的线程和接收事件变化的操作处理线程(默认情况下在哪个线程使用发送事件和接收事件的线程中处理)

在被观察对象中使用ObserveOn和SubscribeOn两个方法可实现线程指定:

ObservabeOn: 

specify the Scheduler on which an observer will observe this Observable
指定一个观察者在哪个调度器上观察这个Observable

SubscribeOn:

specify the Scheduler on which an Observable will operate
指定Observable自身在哪个调度器上执行

图解: 

从上面的图例中可以看出,SubscribeOn这个操作符指定的是Observable自身在哪个调度器上执行,而且跟调用的位置没有关系。而ObservableOn则是指定一个观察者在哪个调度器上观察这个Observable,当每次调用了ObservableOn这个操作符时,之后都会在选择的调度器上进行观察,直到再次调用ObservableOn切换了调度器。



附: 翻墙博客介绍地址,分为part1 part2 part3:

https://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

附: WiKi学习网址:

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

猜你喜欢

转载自blog.csdn.net/u013519084/article/details/82022894
今日推荐