RxJava2(一)
前言
**Rxjava2是基于观察者模式下的框架,学习之前最好先了解观察者模式。**
相关类库
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
简单使用
异步+链式编程
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("消息1"); //发送消息
emitter.onNext("消息2");
emitter.onNext("消息3");
emitter.onNext("消息4");
emitter.onComplete(); //发送完毕
}
})
.observeOn(AndroidSchedulers.mainThread())//回调在主线程
.subscribeOn(Schedulers.io())//执行在io线程
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
应用场景
1.与Retrofit联用
2.Rx系列类库的使用
Rxpermissions 、RxBinding 、RxBus等
3.所有用异步的场景
借用网上例子
比如我们要依次加载10张图片(加载图片是耗时过程),其中第六张我们延时3秒加载,
第7张我们复制到sd卡里,第8张我们要上网络,那么请问你要怎么做,如果用Handler,
必然是各种嵌套,各种逻辑复杂得让你再看一眼都难受,但是如果使用RxJava呢?
Observable.create(new ObservableOnSubscribe<Drawable>() {
@Override
public void subscribe(ObservableEmitter<Drawable> emitter) throws Exception {
for (int i=0;i<drawableRes.length;i++){
Drawable drawable=getResources().getDrawable(drawableRes[i]);
//第6个图片延时3秒后架子
if (i==5){
sleep(3000);
}
//复制第7张图片到sd卡
if (i==6){
Bitmap bitmap=((BitmapDrawable)drawable).getBitmap();
saveBitmap(bitmap,"test.png", Bitmap.CompressFormat.PNG);
}
//上传到网络
if (i==7){
updateIcon(drawable);
}
emitter.onNext(drawable);
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Drawable>() {
@Override
public void accept(Drawable drawable) throws Exception {
//回调后在UI界面上展示出来
}
});
总结
随着程序逻辑变得越来越复杂,RxJava依然能够保持简洁
1.RxJava2.0是非常好用的一个异步链式库,遵循观察者模式。
2.创建RxJava最简单的步骤,一、创建被观察者对象,二、创建观者对象,三、创建订阅关系;
3.所有的异步都可以用RxJava来做。