Android RxJava第一弹之原理详解、使用详解、常用场景(基于Rxjava2.0)
Android RxJava第二弹之RxJava封装库 RxJava+Animation RxJava+Glide
Android RxJava第三弹之RxJava2.0尝鲜
本人参考以下文章
注:原理讲解可能会用到rx1.0的概念,但是代码示例部分用rx2.0 来展示
引言
很多做android开发朋友对rxjava都有熟悉,github上也出现了很多的基于rxjava的开源库,比如 RxBus RxBinding RxPermission,如果我们了解了RxJava的原理,那么我们也可以很轻松的通过RxJava来封装我们自己的库。后面会有简单的例子来用RxJava来封装Animation。
好了,开始我们的正文
RxJava介绍和原理简析
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虚拟机:用于通过使用观察序列构成异步和基于事件的程序库。
扩展了观察者模式,以支持数据/事件序列,并增加了操作符,他可以将将序列清晰的组合在一起的。这些序列组合可以是抽象出来的某些数据/事件,如低级别的线程,同步,线程安全和并发数据结构。
概括的的文字刚开始一般是看不懂的,简单来说RxJava就是一个实现异步操作的库。
扩展的观察者模式
官方的概括中提到了扩展的观察者模式,那么我们先从此入手
观察者模式
Java_观察者模式(Observable和Observer)
在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。
这里Observable(被观察者)对象的变化是采用注册(Register)或者称为订阅(Subscribe)的方式告诉Observer(观察者)。
RxJava的观察者模式
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
备:
RxJava2.0还添加了一个新的回调方法:onSubscribe(),这是为了解决RxJava1.0的backpressure问题,后面会讲到
RxJava观察者模式的图如下
RxJava的基本实现
因为RxJava2.0引入了很多新的接口,我们在讲原理的时候,直接拿着2.0的代码来做示例,但是有些得放用2.0不太好理解,我们就用1.0的代码来理解原理吧
创建Subscriber(2.0)/Observer(2.0)
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
Logger.i("hello onSubscribe");
}
@Override
public void onNext(String s) {
Logger.i("hello onNext-->" + s);
}
@Override
public void onError(Throwable t) {
Logger.i("hello onError");
}
@Override
public void onComplete() {
Logger.i("hello onComplete");
}
};
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Logger.i("hello onSubscribe");
}
@Override
public void onNext(String value) {
Logger.i("hello onNext-->" + value);
}
@Override
public void onError(Throwable e) {
Logger.i("hello onError");
}
@Override
public void onComplete() {
Logger.i("hello onComplete");
}
};
Subscriber 和 Observer的接口是分别独立的,Obsesrver用于订阅Observable,而Subscriber用于订阅Flowable
创建Flowable(2.0)/Observable(2.0)
Observable 即被观察者,它决定什么时候触发事件以及触发怎样的事件。 RxJava 使用 create()方法来创建一个Observable,并为它定义事件触发规则
Flowable<String> stringFlowable = Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> e) throws Exception {
Logger.i("---rxHelloFlowable---");
}
}, FlowableEmitter.BackpressureMode.BUFFER);
Observable<String> stringObservable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("Hello");
e.onNext("Inke");
e.onComplete();
}
});
可以看到,这里传入了一个 ObservableOnSubscribe对象作为参数,它的作用相当于一个计划表,当 Observable被订阅的时候,ObservableOnSubscribe的subscribe()方法会自动被调用,事件序列就会依照设定依次触发(对于上面的代码,就是观察者Subscriber

本文深入解析Android环境下RxJava2.0的原理,包括扩展的观察者模式、基本实现、线程控制及常用操作符。通过实例展示了RxJava在三级缓存、心跳检测、遍历集合和并发任务等场景的应用,帮助开发者掌握RxJava的使用技巧。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=52564494&d=1&t=3&u=399fd040654847969ced883ac6da8f73)
3659

被折叠的 条评论
为什么被折叠?



