本文作为初学文章,(感谢前人的贡献)参考资料:
肖邦kaka的RxJava2.0——从放弃到入门
Carson_Ho的Android Rxjava:这是一篇 清晰 & 易懂的Rxjava 入门教程
更多详细的资料可以参考:玉刚写作平台——RxJava2 只看这一篇文章就够了
文章目录:
- RxJava定义
- RxJava作用
- RxJava特点
- RxJava主要方法
- RxJava的使用及代码
RxJava定义
github地址:https://github.com/ReactiveX/RxJava
官方解释:一个使用Java VM的可观察序列组成异步和基于事件的程序的库。
RxJava作用
实现异步操作(类似于Android中的AsyncTask、Handler作用)
RxJava特点
由于 RxJava的使用方式是:基于事件流的链式调用,所以使得 RxJava:
- 逻辑简洁
- 实现优雅
- 使用简单
- 随着程序逻辑的复杂性提高,它依然能够保持简洁 & 优雅
RxJava主要方法
RxJava基于一种扩展的观察者模式,涉及到三种角色:
- 被观察者(Observable):产生事件
- 观察者(Observer) :接收事件,并给出响应动作
- 订阅(Subscribe):连接 被观察者 & 观察者
被观察者的三个方法
方法 | 可调用次数 |
---|---|
void onNext(T value) | 可无限调用 |
void onError(Throwable error) | 而onError不可以重复调用(与onComplete方法互斥) |
void onComplete() | 可以重复调用(但是Observer(观察者)只会接收一次)(与onError方法互斥) |
观察者的三个方法(与被观察者的三个方法对应)
RxJava的使用及代码
首先我们要先添加依赖:
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
- 分步骤实现
- 创建被观察者对象
- 创建观者对象
- 创建订阅关系
- 基于事件流的链式调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//rxJavaBaseUse();
rxJavaChainUse();
}
//分步骤实现代码
private void rxJavaBaseUse() {
//被观察者
Observable novel = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("连载1");
e.onNext("连载2");
e.onNext("连载3");
e.onComplete();
}
});
//观察者
Observer<String> reader = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "onSubscribe: ");
}
@Override
public void onNext(String value) {
if ("连载2".equals(value)) {
//mDisposable.dispose();//此处用于切断观察者 与 被观察者 之间的连接,
//观察者 无法继续 接收 被观察者的事件,但被观察者还是可以继续发送事件具体使用
return;
}
Log.e(TAG, "onNext: " + value);
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
}
};
//订阅
novel.subscribe(reader);
}
//链式调用实现代码
private void rxJavaChainUse() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("连载1");
e.onNext("连载2");
e.onNext("连载3");
e.onComplete();
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "onSubscribe: ");
}
@Override
public void onNext(String value) {
Log.e(TAG, "onNext: " + value);
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
}
});
}