1. 程式人生 > >RxJava2(一)完整生命週期

RxJava2(一)完整生命週期

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: 無論正常終止還是異常終止都會被呼叫