本篇文章已授權微信公眾號 YYGeeker
獨家釋出轉載請標明出處
CSDN學院課程地址
- RxJava2從入門到精通-初級篇:edu.csdn.net/course/deta…
- RxJava2從入門到精通-中級篇:edu.csdn.net/course/deta…
- RxJava2從入門到精通-進階篇:edu.csdn.net/course/deta…
- RxJava2從入門到精通-原始碼分析篇:edu.csdn.net/course/deta…
4. RxJava基本響應型別
4.1 Observable
Observable是最基本的響應型別,但不支援背壓,基本上適用大多數的應用場景
有關背壓的概念等,都會在下一章介紹
public static void observable() {
//建立被觀察者
Observable.create(new ObservableOnSubscribe<String>() {
@Override
//預設在主執行緒裡執行該方法
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("俊俊俊很帥");
e.onNext("你值得擁有");
e.onNext("取消關注");
e.onNext("但還是要保持微笑");
e.onComplete();
}
})
//將被觀察者切換到子執行緒
.subscribeOn(Schedulers.io())
//將觀察者切換到主執行緒 需要在Android環境下執行
//.observeOn(AndroidSchedulers.mainThread())
//建立觀察者並訂閱
.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=取消關注
onNext=但還是要保持微笑
onComplete
複製程式碼
4.2 Flowable
Flowable和Observable的使用基本相同,只不過Observable不支援背壓,而Flowable支援背壓。但需要注意的是,使用Flowable的時候,必須呼叫Subscription的requsest方法請求,不然上游是不會發射資料的
public static void flowable() {
//建立被觀察者
Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> e) throws Exception {
e.onNext("俊俊俊很帥");
e.onNext("你值得擁有");
e.onNext("取消關注");
e.onNext("但還是要保持微笑");
e.onComplete();
}
}, BackpressureStrategy.DROP)
//將被觀察者切換到子執行緒
.subscribeOn(Schedulers.io())
//將觀察者切換到主執行緒 需要在Android環境下執行
//.observeOn(AndroidSchedulers.mainThread())
//建立觀察者並訂閱
.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只發射一個元素,發射onSuccess
或onError
方法,所以沒有complete方法,不像Observable或者Flowable,資料發射完成之後,需要呼叫complete告訴下游已經完成
public static void single() {
//建立被觀察者
Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> e) throws Exception {
e.onSuccess("success");
}
})
//將被觀察者切換到子執行緒
.subscribeOn(Schedulers.io())
//將觀察者切換到主執行緒 需要在Android環境下執行
//.observeOn(AndroidSchedulers.mainThread())
//建立觀察者並訂閱
.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不會發射資料,只會給下游傳送一個訊號。回撥onComplete
或onError
方法
public static void completable() {
//建立被觀察者
Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter e) throws Exception {
e.onComplete();
}
})
//將被觀察者切換到子執行緒
.subscribeOn(Schedulers.io())
//將觀察者切換到主執行緒 需要在Android環境下執行
//.observeOn(AndroidSchedulers.mainThread())
//建立觀察者並訂閱
.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的結合,需要注意的是onSuccess和onComplete方法只會執行其中一個,這不同於Observable和Flowable最後是以onComplete()結尾
public static void maybe() {
//建立被觀察者
Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(MaybeEmitter<String> e) throws Exception {
e.onSuccess("success");
e.onComplete();
}
})
//將被觀察者切換到子執行緒
.subscribeOn(Schedulers.io())
//將觀察者切換到主執行緒 需要在Android環境下執行
//.observeOn(AndroidSchedulers.mainThread())
//建立觀察者並訂閱
.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 小結
- Observable:最基本的響應型別,不支援背壓
- Flowable:最基本的響應型別,支援背壓
- Single:只發射一個資料的響應型別
- Completable:只發射一個訊號的響應型別
- Maybe:Single和Completable的結合體