1.什麼是RxJava? 簡單,清晰的多線程編程框架.可方便的寫出維護性高,邏輯清晰的Java程式. 2.什麼是觀察者模式? 入門教程講這種高大上抽象概念都是耍流氓! 3.開始 3.1github地址 https://github.com/ReactiveX/RxJava https://githu ...
1.什麼是RxJava?
簡單,清晰的多線程編程框架.可方便的寫出維護性高,邏輯清晰的Java程式.
2.什麼是觀察者模式?
入門教程講這種高大上抽象概念都是耍流氓!
3.開始
3.1github地址
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
3.2添加依賴:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.8'
以上是rxjava的最新版本.
4.helloworld程式
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Observable.create(new ObservableOnSubscribe<Integer>(){ @Override public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception { int i = 0; while(i < 5) { e.onNext(i++); Log.i(TAG, "subscribe: "+i); } e.onComplete(); // e.onError(new Throwable("onError")); while(i < 10) { e.onNext(i++); Log.i(TAG, "subscribe: "+i); } } }).subscribe(new Observer<Integer>(){ @Override public void onSubscribe(Disposable d) { Log.i(TAG, "onSubscribe: "); } @Override public void onNext(Integer integer) { Log.i(TAG, "onNext: " + integer); } @Override public void onError(Throwable e) { Log.i(TAG, "onError: "); } @Override public void onComplete() { Log.i(TAG, "onComplete: "); } }); } }
log如下:
5.RxJava原理
Observable相當於產生事件的上流紅色水管,
Observer是接受事件的下流綠色水管.
通過subscribe()方法,將兩者關聯起來,Observer(綠色水管)便可以接受Observable(紅色水管)發送過來的事件,進行相應的邏輯處理.
5.1 源碼分析
從log可分析出:
1.兩個水管通過subscribe()建立連接後,onSubscribe()方法在第一個執行,執行完成後,才進行發送數據.
2.在執行完onComplete()(或者onError())後,上流水管繼續發送事件,但下流水管不在接受事件.
5.2 說明
5.2.1 subscribe()方法
該方法接受Observer參數,上面已經用過了.
其他參數,如Consumer<> onNext表示下流水管只關心onNext()事件,其他事件不去處理,多個參數同理.