本篇文章已授權(quán)微信公眾號 YYGeeker
獨家發(fā)布轉(zhuǎn)載請標明出處
CSDN學院課程地址
- RxJava2從入門到精通-初級篇:https://edu.csdn.net/course/detail/10036
- RxJava2從入門到精通-中級篇:https://edu.csdn.net/course/detail/10037
- RxJava2從入門到精通-進階篇:https://edu.csdn.net/course/detail/10038
- RxJava2從入門到精通-源碼分析篇:https://edu.csdn.net/course/detail/10138
4. RxJava基本響應(yīng)類型
4.1 Observable
Observable是最基本的響應(yīng)類型恶耽,但不支持背壓珊皿,基本上適用大多數(shù)的應(yīng)用場景
有關(guān)背壓的概念等,都會在下一章介紹
public static void observable() {
//創(chuàng)建被觀察者
Observable.create(new ObservableOnSubscribe<String>() {
@Override
//默認在主線程里執(zhí)行該方法
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("俊俊俊很帥");
e.onNext("你值得擁有");
e.onNext("取消關(guān)注");
e.onNext("但還是要保持微笑");
e.onComplete();
}
})
//將被觀察者切換到子線程
.subscribeOn(Schedulers.io())
//將觀察者切換到主線程 需要在Android環(huán)境下運行
//.observeOn(AndroidSchedulers.mainThread())
//創(chuàng)建觀察者并訂閱
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
System.out.println("onNext=" + s);
}
@Override
public void onError(Throwable e) {
System.out.println("onError=" + e.getMessage());
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
});
}
輸出
onNext=俊俊俊很帥
onNext=你值得擁有
onNext=取消關(guān)注
onNext=但還是要保持微笑
onComplete
4.2 Flowable
Flowable和Observable的使用基本相同,只不過Observable不支持背壓透揣,而Flowable支持背壓。但需要注意的是,使用Flowable的時候,必須調(diào)用Subscription的requsest方法請求烦感,不然上游是不會發(fā)射數(shù)據(jù)的
public static void flowable() {
//創(chuàng)建被觀察者
Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> e) throws Exception {
e.onNext("俊俊俊很帥");
e.onNext("你值得擁有");
e.onNext("取消關(guān)注");
e.onNext("但還是要保持微笑");
e.onComplete();
}
}, BackpressureStrategy.DROP)
//將被觀察者切換到子線程
.subscribeOn(Schedulers.io())
//將觀察者切換到主線程 需要在Android環(huán)境下運行
//.observeOn(AndroidSchedulers.mainThread())
//創(chuàng)建觀察者并訂閱
.subscribe(new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
s.request(2);
}
@Override
public void onNext(String s) {
System.out.println("onNext=" + s);
}
@Override
public void onError(Throwable t) {
System.out.println("onError=" + t.getMessage());
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
});
}
輸出
onNext=俊俊俊很帥
onNext=你值得擁有
4.3 Single
Single只發(fā)射一個元素,發(fā)射onSuccess
或onError
方法膛堤,所以沒有complete方法手趣,不像Observable或者Flowable,數(shù)據(jù)發(fā)射完成之后骑祟,需要調(diào)用complete告訴下游已經(jīng)完成
public static void single() {
//創(chuàng)建被觀察者
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> e) throws Exception {
e.onSuccess("success");
}
})
//將被觀察者切換到子線程
.subscribeOn(Schedulers.io())
//將觀察者切換到主線程 需要在Android環(huán)境下運行
//.observeOn(AndroidSchedulers.mainThread())
//創(chuàng)建觀察者并訂閱
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
System.out.println("onSuccess=" + s);
}
@Override
public void onError(Throwable e) {
System.out.println("onError=" + e.getMessage());
}
});
}
輸出
onSuccess=success
4.4 Completable
Completable不會發(fā)射數(shù)據(jù)回懦,只會給下游發(fā)送一個信號〈纹螅回調(diào)onComplete
或onError
方法
public static void completable() {
//創(chuàng)建被觀察者
Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
e.onComplete();
}
})
//將被觀察者切換到子線程
.subscribeOn(Schedulers.io())
//將觀察者切換到主線程 需要在Android環(huán)境下運行
//.observeOn(AndroidSchedulers.mainThread())
//創(chuàng)建觀察者并訂閱
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
@Override
public void onError(Throwable e) {
System.out.println("onError=" + e.getMessage());
}
});
}
輸出
onComplete
4.5 Maybe
Maybe是Single和Completable的結(jié)合怯晕,需要注意的是onSuccess和onComplete方法只會執(zhí)行其中一個,這不同于Observable和Flowable最后是以onComplete()結(jié)尾
public static void maybe() {
//創(chuàng)建被觀察者
Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(MaybeEmitter<String> e) throws Exception {
e.onSuccess("success");
e.onComplete();
}
})
//將被觀察者切換到子線程
.subscribeOn(Schedulers.io())
//將觀察者切換到主線程 需要在Android環(huán)境下運行
//.observeOn(AndroidSchedulers.mainThread())
//創(chuàng)建觀察者并訂閱
.subscribe(new MaybeObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
System.out.println("onSuccess=" + s);
}
@Override
public void onError(Throwable e) {
System.out.println("onError=" + e.getMessage());
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
});
}
輸出
onSuccess=success
4.6 小結(jié)
- Observable:最基本的響應(yīng)類型缸棵,不支持背壓
- Flowable:最基本的響應(yīng)類型舟茶,支持背壓
- Single:只發(fā)射一個數(shù)據(jù)的響應(yīng)類型
- Completable:只發(fā)射一個信號的響應(yīng)類型
- Maybe:Single和Completable的結(jié)合體