RxJava已经出来很长时间,一直没有去深入的看看它的源码,最近抽时间一起来窥探一下它的精彩。总结不足之处,希望能够指出,一起进步。
标题什么是RxJava?
RxJava通过观察者模式基于事件订阅的异步执行的类库。
RxJava的目的是什么?
异步处理
RxJava的优势?
与AsyncTask和Handler对比
优势:逻辑简洁
这里新建了一个项目LearningRxJava
集成步骤:
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
allprojects中添加
maven { url 'https://jitpack.io' }
RxJava的组成部分
RxJava分四个部分组成
Observable:被观察者。
Observer:观察者。
subscribe:订阅,通过Observable的subscribe()方法进行订阅。
Subscriber:观察者 与Observer类似,不同的是 Subscriber要与Flowable(另一种被观察者)联合使用。
第一种简单使用方式:
// 创建观察者
Subscriber observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("observer", "observer onSubscribe");
}
@Override
public void onNext(String s) {
Log.e("observer", "observer onNext " + s);
}
@Override
public void onError(Throwable e) {
Log.e("observer", "observer onError " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("observer", "observer onComplete");
}
};
// 创建被观察者
// 第一种方法
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("张三来了");
emitter.onComplete();
}
});
//建立关系
observable.subscribe(observer);
// 第二种方法
Observable<String> observable1 = Observable.just("李四来了");
//建立关系
observable1.subscribe(observer);
输出结果:
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onSubscribe
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onNext 张三来了
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onComplete
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onSubscribe
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onNext 李四来了
2019-06-18 10:44:19.020 10254-10254/? E/observer: observer onComplete
第二种简单使用方式:
// 创建观察者
Subscriber subscriber = new Subscriber() {
@Override
public void onSubscribe(Subscription s) {
Log.e("observer", "subscriber onSubscribe");
s.request(Long.MAX_VALUE);
}
@Override
public void onNext(Object o) {
Log.e("observer", "subscriber onNext " + o.toString());
}
@Override
public void onError(Throwable t) {
Log.e("observer", "subscriber onError");
}
@Override
public void onComplete() {
Log.e("observer", "subscriber onComplete");
}
};
// 创建被观察者
// 第一种方法
Flowable<String> flowable = Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> emitter) throws Exception {
emitter.onNext("王五来了");
emitter.onComplete();
}
}, BackpressureStrategy.BUFFER);
//建立关系
flowable.subscribe(subscriber);
// 第二种方法
Flowable<String> flowable1 = (Flowable<String>) Flowable.just("赵六来了");
flowable1.subscribe(subscriber);
输出结果:
2019-06-18 10:44:19.037 10254-10254/? E/observer: subscriber onSubscribe
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onNext 王五来了
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onComplete
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onSubscribe
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onNext 赵六来了
2019-06-18 10:44:19.038 10254-10254/? E/observer: subscriber onComplete
通过上边这个小例子,我们清楚的知道它是怎么实现的。
参考 深入浅出RxJava(一:基础篇)
参考 RxJava2.0——从放弃到入门
参考 RxJava2.0的使用详解
参考 给 Android 开发者的 RxJava 详解
网友评论