RxJava正在Android開發(fā)者中變的越來越流行?,F(xiàn)在項目中運用到,所以也深入學習。軟件這行嘛,特別是程序猿,學習能力要跟上。廢話不多說,直接開始。總的概括是:Rxjava就是設計模式中的觀察者模式。
基礎
RxJava最核心的兩個東西是Observables(被觀察者,事件源)和Subscribers(觀察者)。Observables發(fā)出一系列事件。Subscribers處理這些事件。這里的事件可以是任何你感興趣的東西(觸摸事件,web接口調用返回的數(shù)據(jù)。。。),Observable可以發(fā)出零個或者多個事件,知道結束或者出錯。每發(fā)出一個事件,就會調用它的Subscriber的onNext方法,最后調用Subscriber.onNext()或者Subscriber.onError()結束。
之前也說了:Rxjava就是設計模式中的觀察者模式。那么如果一個Observerble沒有任何的的Subscriber,那么這個Observable是不會發(fā)出任何事件的。
入門HelloWorld
創(chuàng)建一個Observable對象很簡單,直接調用Observable.create即可
Observable myObservable = Observable.create(這里定義的Observable對象僅僅發(fā)出一個Hello World字符串,然后就結束了。接著我們創(chuàng)建一個Subscriber來處理Observable對象發(fā)出的字符串。
? ? newObservable.OnSubscribe() {
? ? ? public void call(Subscriber<? super String > sub) {
? ? ? ? sub.onNext("Hello, world!");
? ? ? ? sub.onCompleted();
? ? ? }
? ? }
);
Subscriber mySubscriber =newSubscriber() {
? public void onNext(String s) { System.out.println(s); }
? public void? onCompleted() { }
? public void onError(Throwable e) { }
}
這里subscriber僅僅就是打印observable發(fā)出的字符串。通過subscribe函數(shù)就可以將我們定義的myObservable對象和mySubscriber對象關聯(lián)起來,這樣就完成了subscriber對observable的訂閱。
myObservable.subscribe(mySubscriber);一旦mySubscriber訂閱了myObservable,myObservable就是調用mySubscriber對象的onNext和onComplete方法,mySubscriber就會打印出Hello World!
看到這里大家會說:就一個Hello World 特么就要了那么多代碼,何來簡潔,簡直是加重了代碼行數(shù)。但是您耐心觀察你就會發(fā)現(xiàn),RxJava 的這個實現(xiàn),是一條從上到下的鏈式調用,沒有任何嵌套,這在邏輯的簡潔性上是具有優(yōu)勢的。(這個大家慢慢體會哈)。
下面我們來個更簡單的更簡潔的代碼實現(xiàn):
RxJava內置了很多簡化創(chuàng)建Observable對象的函數(shù),比如Observable.just就是用來創(chuàng)建只發(fā)出一個事件就結束的Observable對象,上面創(chuàng)建Observable對象的代碼可以簡化為一行:
Observable myObservable = Observable.just("Hello, world!");
你們看少了create 那坨代碼吧,是不是越來越爽呢?
接下來看看如何簡化Subscriber,上面的例子中,我們其實并不關心OnComplete和OnError,我們只需要在onNext的時候做一些處理,這時候就可以使用Action1類。
Action1 onNextAction =newAction1() {
? public void call(String s) {
? System.out.println(s);
? }
}
subscribe方法有一個重載版本,接受三個Action1類型的參數(shù),分別對應OnNext,OnComplete, OnError函數(shù)。
這里我們并不關心onError和onComplete,所以只需要第一個參數(shù)就可以
myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction);
myObservable.subscribe(onNextAction);
所以最終的寫法:
Observable.just("Hello, world!")今天的基礎就講解到這里。下一章我會詳細RxJava用法以及操作符(Operators)
? .subscribe(newAction1() {
? ? public void call(String s) {
? ? System.out.println(s);
? ? }
? });