RxJava 优点
改变思维,思路整洁,提升效率
(1)改变我们的编程思维方式,让我们的编写的代码更加高效
(2)能够梳理代码流程,更加清晰整洁
RXjava是一个响应式的编程,运用RxJava本身不会提升代码执行效率,它不针对也不解决任何问题,而是从编程思想层面来改变我们的编程思维,能够梳理代码流程,更加清晰整洁,从而让我们编写的代码更加高效,更易维护。
备注:响应式编程是一种通过异步和数据流来构建事务关系的编程模型。例如:APP初始化逻辑,完成SDK初始化,数据库初始化,登陆,之后跳转主界面。
RxJava在github上官方解释
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.
翻译过来是:
RxJava是一个响应扩展的Java VM实现:一个通过使用可观察序列来组合异步和基于事件的程序的库。
它扩展了观察者模式以支持数据/事件序列,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出对底层线程、同步、线程安全和并发数据结构等问题的关注。
接入:
implementation "io.reactivex.rxjava2:rxjava:2.0.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
示例代码
//Observable : 被观察者(起点)
//Observer: 观察者(终点)
//被观察者(起点)
Observable
//执行顺序的第二步
.just(IMG_PATH) //IMG_PATH 事件源
//执行顺序的第三步
.map(new Function<String, Bitmap>() {
@Override
public Bitmap apply(@NonNull String s) throws Exception {
//耗时操作 不用加try-catch因为该方法已捕获异常
//通过路径 s 异步加载 bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
return bitmap;
}
})
.map(new Function<Bitmap, Bitmap>() {
@Override
public Bitmap apply(@NonNull Bitmap bitmap) throws Exception {
//可以进行加水印等后续操作
return bitmap;
}
})
//给上游分配异步线程(订阅线程)
.subscribeOn(Schedulers.io())
//给下游分配安卓主线程(观察者Observer执行的线程)
.observeOn(AndroidSchedulers.mainThread())
//订阅 关联 起点(被观察者Observable)和(观察者Observer)终点
.subscribe(new Observer<Bitmap>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
//执行顺序的第一步
//弹出加载提示框
}
@Override
public void onNext(@NonNull Bitmap bitmap) {
//执行顺序的第四步
image.setImageBitmap(bitmap);
}
@Override
public void onError(@NonNull Throwable e) {
//执行顺序的第五步(onError 和onComplete 互斥)
//关闭加载提示框
}
@Override
public void onComplete() {
//执行顺序的第五步 (onError 和onComplete 互斥)
//关闭加载提示框
}
});
//自定义方式
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("1");
emitter.onNext("2");
emitter.onNext("3");
}
});
代码图解:
RxJava是倒“U”形的执行顺序
RxJava中观察者模式和标准的观察者模式区别:
标准的观察者模式:
一个被观察者,可以注册多个观察者,需要自己主动发出事件。
RxJava使用了变种的观察者:
多个被观察者,只能注册一个观察者,一旦注册会马上分发事件。
RxJava观察者备注:1 被观察者显示的是一个,其实源码里是多个;
2 注册在这里叫订阅;
3 subscribe()调这个方法后会直接回调onSubscribe()方法。
感谢:腾讯课堂