1.操作符基类
RxJava2.0提供了5中操作符的基类,分别为:
Observable,Maybe,Flowable,Completable,Single
1.1Observable和Flowable区别
同步:Observable和Flowable都是被观察者发送当前事件之后,一直阻塞到观察者处理完当前事件之后,才会发送下一个事件;
异步:Observable异步的情况下,被观察者不停的发送事件,直到所有事件发送完,不管观察者是否能够及时处理,就造成有大量的事例在缓冲区等待处理,造成内存不断增加,甚至OOM,就需要采用Flowable的背压策略
1.2 RxJava中的同步异步:
RxJava 除非你显式切换到其他的 Scheduler
,或者你使用的某些操作符隐式指定了其他 Scheduler
,否则 RxJava 相关代码就是同步执行的。
1.3 切换线程
subscribeOn 切换被观察者(Observable)线程
observeOn 切换观察者(Observer)线程
1.4 几种常用的线程
Schedulers.immediate() 当前线程 不指定线程
AndroidScheduler.mainThread() Android主线程 操作ui
Schedulers.newThread() 常规新线程 耗时操作
Schedulers.io() io操作线程 网络请求,读写文件等
Schedulers.computation() cpu计算操作线程 大量计算操作
2.disposable
rxjava虽然好用,但是总所周知,容易遭层内存泄漏。也就说在订阅了事件后没有及时取阅,导致在activity或者fragment销毁后仍然占用着内存,无法释放。而disposable便是这个订阅事件,可以用来取消订阅
3. 操作符
4.使用详细
1、创建一个可观察对象Observable发射数据流
2、通过操作符Operator加工处理数据流
3、通过线程调度器Scheduler指定操作数据流所在的线程
4、创建一个观察者Observer接收响应数据流
5.示例
//Single
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(@NonNull SingleEmitter<String> e) throws
Exception {
e.onSuccess("test");
}
}).subscribe(
new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
System.out.println(s);
}
},
new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
throwable.printStackTrace();
}
});