前言
依稀记得第一次接触RxJava时,对着文档撸了一遍。仍然是懵懵的,为啥呢?当然是因为菜,哈哈。现在重新来学习下RxJava,重新认识它究竟有什么样的魅力。对于RxJava 1.xx版本和RxJava 2.xx版本,本质上没有什么区别,只是RxJava 2.xx版本增加了新特性。所以,我们直接来学习RxJava 2.xx版本,本系列主要分为以下几部分。
- RxJava 2.xx版本基本使用
- RxJava 2.xx版本源码分析
- RxJava 2.xx版本实战
基本使用
优点
- 代码逻辑简洁
- 实现优雅
- 使用方便
代码逻辑简洁
看到这个优点,想必同学们心里有数了。可以想象下我们项目的代码特别特别多,看着就头疼。但是使用RxJava时,代码逻辑会变得简洁,方便我们阅读代码。
实现优雅
这个优点,我觉得就是俩字,牛逼。让人一看,就觉得代码风格特别高大上。
组成
- 被观察者(Observable),产生事件
- 观察者(Observer),接受事件并作出响应
- 订阅(Subscribe),连接被观察者和观察者
创建被观察者
create()
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();
}
});
复制代码
上面代码就是创建Observable的基本方式,通过create方法来创建。那么我们来看一下方法内的几个参数
ObservableOnSubscribe
public interface ObservableOnSubscribe<T> {
/**
* Called for each Observer that subscribes.
* @param e the safe emitter instance, never null
* @throws Exception on error
*/
void subscribe(ObservableEmitter<T> e) throws Exception;
}
复制代码
从源码中可以看出ObservableOnSubscribe是一个接口,里面有一个subscribe方法,也就是我们创建Observable实现的方法。
ObservableEmitter
public interface ObservableEmitter<T> extends Emitter<T> {
void setDisposable(Disposable d);
void setCancellable(Cancellable c);
boolean isDisposed();
ObservableEmitter<T> serialize();
}
复制代码
可以看出ObservableEmitter也是一个接口,并且继承了Emitter,然后我们来看一下Emitter。
public interface Emitter<T> {
void onNext(@NonNull T value);
void onError(@NonNull Throwable error);
void onComplete();
复制代码
从Emitter中就可以看到熟悉的方法了,这三个方法就是我们常用的发送事件相关的方法。
onNext()
发送该事件时,观察者会回调该方法。简单点,就是用来发送事件
onError()
发送该事件后,其他事件不再发送。通过方法名字,也知道该方法表示发生错误
onComplete()
发送该事件后,其他事件不再发送。与onError()不同的是, onComplete()表示所有的事件都发送完毕,然后事件不再发送。
subscribe方法
主要是通过ObservableEmitter来产生事件,并通知Observer。
Observable.just()
Observable observable = Observable.just(1,2,3);
复制代码
just()表示创建被观察者,并发送事件。比如上面的代码中通过just方法创建了一个Observable,并且发送了三个事件。效果相当于以下代码
e.onNext(1);
e.onNext(2);
e.onNext(3);
e.onComplete();
复制代码
需要注意的是,just方法发送的事件不能超过10个,在使用时,同学们需要特备注意哦。
Observable.fromArray()
Integer[] integers = {1,2,3};
Observable observable = Observable.fromArray(integers);
复制代码
可以看出与just方法不同的是,fromArray方法可以传入一个数组,并且传入多于10个以上的参数。然后实现效果也是创建被观察者并发送相应的事件,与just方法类似。
创建观察者
创建观察者有以下2种方式,我们来看一下。
实现Observer接口
Observer<Integer> observer = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
//最先调用onSubscribe
}
@Override
public void onNext(Integer integer) {
//对onNext事件响应
}
@Override
public void onError(Throwable e) {
//对onError事件响应
}
@Override
public void onComplete() {
//onComplete事件响应
}
};
复制代码
通过实现Observer接口来创建观察者,从上面的代码可以看到比较熟悉的几个方法。对于onSubscribe方法,它是最先调用的,其他三个方法都是对事件作出响应。
Subscriber
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
//最先调用onSubscribe
}
@Override
public void onNext(Integer integer) {
//对onNext事件响应
}
@Override
public void onError(Throwable t) {
//对onError事件响应
}
@Override
public void onComplete() {
//onComplete事件响应
}
};
复制代码
可以看出通过Subscriber和Observer创建观察者是差不多的。
订阅
observable.subscribe(observer);
复制代码
调用subscribe方法就可以将被观察者和观察者订阅在一起了,当被观察者发送事件时,观察者就会作出响应。
总结
大概分析了下RxJava 2.xx版本的使用流程,了解了如何创建被观察者、观察者以及订阅。