对于 RxJava2 的 认知与直接应用(一)

来源:互联网 发布:i like it what is it 编辑:程序博客网 时间:2024/06/05 14:36

最近有时间学习些许内容,加上重新写博客来记录自己的学习过程与心得

1.rxjava2 认知

rxjava作为知名的响应式编程库,这半年内极大的火爆开发者中
介绍
Observable 被观察者
|
|
subscribe() 订阅
|
|
Observer 观察者

依赖:
compile ‘io.reactivex.rxjava2:rxjava:2.0.5’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’

Observable写法:以发送integer为例子

Observable<Integer> observable=Observable.create(new ObservableOnSubscribe<Integer>() {            @Override            public void subscribe(ObservableEmitter<Integer> e) throws Exception {                e.onNext(1);                e.onNext(2);                e.onNext(3);                e.onComplete();            }        });

Observer 写法:

Observer<Integer> observer=new Observer<Integer>() {            //自动重写以下方法            @Override            public void onSubscribe(Disposable d) {                Log.i(TAG, "onSubscribe: ");            }            @Override            public void onNext(Integer integer) {                Log.i(TAG, "onNext: "+integer);            }            @Override            public void onError(Throwable e) {                Log.i(TAG, "onError: ");            }            @Override            public void onComplete() {                Log.i(TAG, "onComplete: ");            }        };

订阅事件

 observable.subscribe(observer);

到了这里就可以很成功的进行,完成一个完整的通路了

最后进行一站式直接操作

Observable.create(new ObservableOnSubscribe<Integer>() {            @Override            public void subscribe(ObservableEmitter<Integer> e) throws Exception                 e.onNext(1);                e.onNext(2);                e.onNext(3);                e.onComplete();            }        }).subscribe(new Observer<Integer>() {            @Override            public void onSubscribe(Disposable d) {                Log.i(TAG, "onSubscribe: ");            }            @Override            public void onNext(Integer integer) {                Log.i(TAG, "onNext: "+integer);            }            @Override            public void onError(Throwable e) {                Log.i(TAG, "onError: ");            }            @Override            public void onComplete() {                Log.i(TAG, "onComplete: ");            }        });

只有subscribe()之后才能进行连通

顺便介绍下Consumer
如果你只是想处理接收到的数据可以使用Consumer
代码如下

Consumer<Integer> consumer = new Consumer<Integer>() {            @Override            public void accept(Integer integer) throws Exception {                Log.i(TAG, "accept: " + integer);            }        };

订阅事件是一样的,observable不变

 observable.subscribe(consumer);

2.rxjava2异步
rxjava2的异步处理真心非常棒
主要在于以下方法

.subscribeOn(Schedulers.newThread())//提供将Observable运行在一个新的线程中.observeOn(AndroidSchedulers.mainThread())//提供将Observer运行在主线程中

很轻松的剥离非主线程执行的操作,很方便的对于网络,数据库,图片的处理
执行完整执行代码如下:
observable,consumer还是上面的那个
像以下代码,如果切换两次线程,那么

observable.subscribeOn(Schedulers.newThread())//在这个线程执行          .subscribeOn(Schedulers.io())//不执行          .observeOn(AndroidSchedulers.mainThread())//执行          .observeOn(Schedulers.io())//切换到这个线程          .subscribe(consumer);          //这里我们就可以灵活应用

rxjava2的内置线程,四种:
—Schedulers.io() :io操作的线程, 通常用于网络请求,读写文件
—Schedulers.computation():需要大量计算的操作
—Schedulers.newThread() :常规的新线程
—AndroidSchedulers.mainThread() :Android的主线程

1 0
原创粉丝点击