Rxjava基本使用

来源:互联网 发布:乐福总决赛第七场数据 编辑:程序博客网 时间:2024/06/05 20:12

Rxjava自去年开始热度越来越高,自己也开始在之后的项目中使用这个开源库。不用不知道,谁用谁知道,真的是太爽了。现在稍微闲下来点,所以就花点时间把该库的一些用法好好总结下。Rxjava主要在android中用来做一些异步操作,能够实现线程间快速切换,它和Thread + Handler ,AsyncTak做异步操作相比代码更加简洁,后期维护更加方便。

1.使用该库的时候首先需要在项目的build.gradle中添加依赖

    compile 'io.reactivex:rxjava:1.0.14'    compile 'io.reactivex:rxandroid:1.0.1'

2.Rxjava使用:
   Rxjava采用观察者设计模式,首先创建Observable(被观察者)和Observer(观察者),通过subscribe()实现两者的订阅关系,在需要的时候Observable发出事件来通知Observer。
   2.1.创建Observable
    查看Observable源码,其构造方法被Protected所修饰,所以我们不能直接通过new来创建其实例,但是Observable为我们提供了大量的static方法获取Obserbale实例对象。
     2.1.1.使用create()创建Observable:

    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {           @Override           public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("Hello RxJava!");                subscriber.onCompleted();           }    });    //创建被观察者之后,还需要创建观察者,然后通过subscribe()将观察者注册到被观察者上,当被观察者被订阅以后就会自动调用call()方法。    //创建观察者:    Observer<String> observer = new Observer<String>() {            @Override            public void onCompleted() {                Log.e(tag , "onCompeleted..");            }            @Override            public void onError(Throwable e) {                Log.e(tag , "onError..");            }            @Override            public void onNext(String str) {                Log.e(tag , "onNext: " + str);            }        };     //添加订阅,订阅成功以后,Observable会自动调用call()方法,这样观察者将会调用onNext()和onComplete()方法。执行默认情况下call()方法和observer中的方法都是运行在主线程中的。我们可以通过subscribeOn()和observeOn()来指定被观察者和观察者运行的线程。    observable.subscribeOn(Schedulers.io())   //指定被观察者运行的线程,即call()方法在哪个现场中执行       .observeOn(AndroidSchedulers.mainThread()) //指定观察者运行的线程,mainThread是android主线程       .subscribe(observer);        // 将观察者注册到被观察者上    //打印结果    onNext: Hello RxJava!    onCompeleted..

     2.1.2.通过from()创建Observable对象

      //使用from(T[] arr)或者from(Iterable iterable)创建Observable,内部会对其传入的数据进行遍历,然后调用subscribe的onNext()方法,遍历结束以后会调用subscribe的onComplete()方法。     Observable.from(new String[]{"hello" , "rxjava"})                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber<String>() {                    @Override                    public void onCompleted() {                        Log.e(tag , "onCompleted..");                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(String s) {                        Log.e(tag , "onNext: " + s);                    }                });    //打印结果    onNext: hello    onNext: rxjava    onCompleted..

     2.1.3.通过interval()创建Observable对象

    //interval()返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列     Observable.interval(1 , TimeUnit.SECONDS)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Action1<Long>() {                    @Override                    public void call(Long aLong) {                        KLog.e("call: " + aLong.longValue());                    }                });    //打印结果    call:0    call:1    call:2    ....

     2.1.4.使用just()创建Observable对象

        //just()将单个数据转换为发射该数据的Observable, 它和from类似,但是from会将数组或者iterable数据取出来逐个发射,而just只是原样发射,将数组或iterable当作单个数据。它接受一至九个参数。        List<String> strs = new ArrayList<>();        strs.add("Hello");        strs.add("Rxjava");        Observable.just(strs)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<List<String>>() {                    @Override                    public void onCompleted() {                       Log.e(tag , "onCompleted...");                    }                    @Override                    public void onError(Throwable e) {                       Log.e(tag , "onError: " + e.getMessage());                    }                    @Override                    public void onNext(List<String> strings) {                        Log.e(tag , "onNext: " + strings.toString());                    }                });        //打印结果        onNext:[Hello, Rxjava]        onCompleted...

     2.1.5.使用range()创建Observable对象

        //使用range()创建发送指定整数序列的Observable , range(int start , int count) , start表示启始值 , count表示数据的个数,count为0时不发射任何数据,为负数时候会抛异常。          Observable.range(2 , 5)                .subscribeOn(Schedulers.computation())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<Integer>() {                    @Override                    public void onCompleted() {                        Log.e(tag , "onCompleted...");                    }                    @Override                    public void onError(Throwable e) {                       Log.e(tag , "onError: " + e.getMessage());                    }                    @Override                    public void onNext(Integer integer) {                        Log.e(tag , "onNext: " + integer);                    }                });        //打印结果        onNext:2        onNext:3        onNext:4        onNext:5        onNext:6        onCompleted...

     2.1.6.使用timer()创建Observable对象

        //通过timer()可以创建一个指定延时之后发射数据的Observable         Observable.timer(2 , TimeUnit.SECONDS)                .subscribeOn(Schedulers.computation())                .subscribeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<Long>() {                    @Override                    public void onCompleted() {                        Log.e(tag , "onCompleted...");                    }                    @Override                    public void onError(Throwable e) {                         Log.e(tag , "onError: " + e.getMessage());                    }                    @Override                    public void onNext(Long aLong) {                         Log.e(tag , "onNext: " + aLong);                    }                });        //掩饰2s以后控制台打印:        onNext:0        onCompleted...
原创粉丝点击