RxJava2 學習(一)

jayqiu發表於2018-08-30

#前言 年底了換工作,在很多公司的面試中都有提到對RxJava運用,在以前我就只是簡單的使用Retrofit +RxJava+OkHttp的運用,自己也沒有深入的理解其中的,現在自己相對於再一次學習,並進行記錄;

##RxJava 的觀察者模式 RxJava 有四個基本概念:Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件。Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable 可以在需要的時候發出事件來通知 Observer。

與傳統觀察者模式不同, RxJava 的事件回撥方法除了普通事件 onNext() (相當於 onClick() / onEvent())之外,還定義了兩個特殊的事件:onCompleted() 和 onError()。

onCompleted(): 事件佇列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個佇列。RxJava 規定,當不會再有新的 onNext() 發出時,需要觸發 onCompleted() 方法作為標誌。 onError(): 事件佇列異常。在事件處理過程中出異常時,onError() 會被觸發,同時佇列自動終止,不允許再有事件發出。 在一個正確執行的事件序列中, onCompleted() 和 onError() 有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在佇列中呼叫了其中一個,就不應該再呼叫另一個。 ##基本實現 Observer 即觀察者,它決定事件觸發的時候將有怎樣的行為。

 Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                Log.e(TAG, "emit 1");
                emitter.onNext(1);
                Log.e(TAG, "emit 2");
                emitter.onNext(2);
                Log.e(TAG, "emit 3");
                emitter.onNext(3);
                Log.e(TAG, "emit complete");
                emitter.onComplete();
                Log.e(TAG, "emit 4");
                emitter.onNext(4);
            }
        }).subscribe(new Observer<Integer>() {
            private Disposable mDisposable;
            private int i;

            @Override
            public void onSubscribe(Disposable d) {
                Log.e(TAG, "subscribe");
                mDisposable = d;
            }

            @Override
            public void onNext(Integer value) {
                Log.e(TAG, "onNext: " + value);
                i++;
                if (i == 2) {
                    Log.e(TAG, "dispose");
                    mDisposable.dispose();
                    Log.e(TAG, "isDisposed : " + mDisposable.isDisposed());
                }
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG, "error");
            }

            @Override
            public void onComplete() {
                Log.e(TAG, "complete");
            }
        });

```java
名稱	解析
just()	將一個或多個物件轉換成發射這個或這些物件的一個Observable
fromArray()	將一個Iterable, 一個Future, 或者一個陣列轉換成一個Observable
repeat()	建立一個重複發射指定資料或資料序列的Observable
repeatWhen()	建立一個重複發射指定資料或資料序列的Observable,它依賴於另一個Observable發射的資料
create()	使用一個函式從頭建立一個Observable
defer()	只有當訂閱者訂閱才建立Observable;為每個訂閱建立一個新的Observable
range()	建立一個發射指定範圍的整數序列的Observable
interval()	建立一個按照給定的時間間隔發射整數序列的Observable
timer()	建立一個在給定的延時之後發射單個資料的Observable
empty()	建立一個什麼都不做直接通知完成的Observable
error()	建立一個什麼都不做直接通知錯誤的Observable
never()	建立一個不發射任何資料的Observable
[Star 我的GitHub](https://github.com/Jayqiu)

[# Back](https://jayqiu.github.io/blog)
複製程式碼

相關文章