RxJava2(一)完整生命週期
阿新 • • 發佈:2018-11-11
RxJava2 完整生命週期
簡介:
1.RxJava用於通過使用被觀察者Obverserable/Flowable序列來構建非同步和基於事件的庫。
2.RxJava支援Java5之後版本,還支援跑在JVM上的各種語言。
3.RxJava可以用在Android開發的任何地方,包括App所依賴的底層框架。
4.匯入依賴:
implementation "io.reactivex.rxjava2:rxjava:2.2.3"
implementation "io.reactivex.rxjava2:rxandroid:2.1.0"
建立一個Hellow World!
Observable. create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
emitter.onNext("Hello World");
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception{
Log.d(TAG, "accept: " + s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
});
5.完整的生命週期
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
try {
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
}
}).doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
Log.d(TAG, "doOnSubscribe: 一旦觀察者訂閱之後就會被呼叫");
}
}).doOnLifecycle(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
Log.d(TAG, "doOnLifecycle: 當觀察者訂閱之後可取消訂閱.當前狀態是否取消:" + disposable.isDisposed());
}
}, new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "doOnLifecycle: 重新訂閱");
}
}).doOnNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "doOnNext: Observable每發射一次資料就呼叫一次,在onNext之前呼叫,用於在subscribe之前對資料進行處理");
}
}).doOnEach(new Consumer<Notification<Integer>>() {
@Override
public void accept(Notification<Integer> integerNotification) throws Exception {
Log.d(TAG, "doOnEach: Observable每發射一次資料就呼叫一次,包括onNext,onError和onComplete");
}
}).doAfterNext(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "doAfterNext: 在onNext之後執行");
}
}).doOnComplete(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "doOnComplete: 資料發射完,Observable正常終止時呼叫");
}
}).doFinally(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "doFinally: 無論正常終止還是異常終止都會被呼叫");
}
}).doAfterTerminate(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "doAfterTerminate: 當呼叫onComplete和onError時觸發");
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "subscribe 收到資料: " + integer);
}
});
輸出結果:
doOnSubscribe: 一旦觀察者訂閱之後就會被呼叫
doOnLifecycle: 當觀察者訂閱之後可取消訂閱.當前狀態是否取消:false
doOnNext: Observable每發射一次資料就呼叫一次,在onNext之前呼叫,用於在subscribe之前對資料進行處理
doOnEach: Observable每發射一次資料就呼叫一次,包括onNext,onError和onComplete
subscribe 收到資料: 1
doAfterNext: 在onNext之後執行
doOnNext: Observable每發射一次資料就呼叫一次,在onNext之前呼叫,用於在subscribe之前對資料進行處理
doOnEach: Observable每發射一次資料就呼叫一次,包括onNext,onError和onComplete
subscribe 收到資料: 2
doAfterNext: 在onNext之後執行
doOnNext: Observable每發射一次資料就呼叫一次,在onNext之前呼叫,用於在subscribe之前對資料進行處理
doOnEach: Observable每發射一次資料就呼叫一次,包括onNext,onError和onComplete
subscribe 收到資料: 3
doAfterNext: 在onNext之後執行
doOnEach: Observable每發射一次資料就呼叫一次,包括onNext,onError和onComplete
doOnComplete: 資料發射完,Observable正常終止時呼叫
doAfterTerminate: 當呼叫onComplete和onError時觸發
doFinally: 無論正常終止還是異常終止都會被呼叫