最近有时间学习些许内容,加上重新写博客来记录自己的学习过程与心得
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的主线程