android學習筆記(2)--RxJava

緊接上一篇博文,本篇介紹RxJava,一個實現異步操做的庫java

RxJava最核心的兩個東西是Observables和Subscribersweb

1.Observables(被觀察者,事件源)發出一系列事件設計模式

2.Subscribers(觀察者)處理這些事件異步

這裏的事件能夠是任何你感興趣的東西(觸摸事件,web接口調用返回的數據等等)ide

一個Observable能夠發出零個或者多個事件,知道結束或者出錯。函數

每發出一個事件,就會調用它的Subscriber的onNext方法,最後調用Subscriber.onNext()或者Subscriber.onError()結束。ui

Rxjava的看起來很想設計模式中的觀察者模式,可是有一點明顯不一樣,那就是若是一個Observerble沒有任何的的Subscriber,那麼這個Observable是不會發出任何事件的。spa

 

eg.一個用RxJava來打印Hello World的程序設計

1.建立一個Observable:調用Observable.create
 
 
Observable<String> myObservable = Observable.create(  
    new Observable.OnSubscribe<String>() {  
        @Override  
        public void call(Subscriber<? super String> sub) {  
            sub.onNext("Hello, world!");  
            sub.onCompleted();  
        }  
    }  
);  

也能夠用簡化版本:code

Observable<String> myObservable = Observable.just("Hello, world!")

這裏定義的Observable對象僅僅發出一個Hello World字符串,而後就結束。

2.建立Subscriber,用於處理Observable對象發出的字符串。

Subscriber<String> mySubscriber = new Subscriber<String>() {  
    @Override  
    public void onNext(String s) { System.out.println(s); }  
  
    @Override  
    public void onCompleted() { }  
  
    @Override  
    public void onError(Throwable e) { }  
};  

簡化版本:

Action1<String> onNextAction = new Action1<String>() {  
    @Override  
    public void call(String s) {  
        System.out.println(s);  
    }  
};  

subscriber僅僅就是打印observable發出的字符串。

3.subscribe函數將myObservable對象和mySubscriber對象關聯。完成了subscriber對observable的訂閱。

myObservable.subscribe(mySubscriber);  

若是以前用的Action1的類,那麼用下面的方法訂閱:

myObservable.subscribe(onNextAction);  

合成以前的簡潔版本,能夠這樣寫:

Observable.just("Hello, world!")  
    .subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } });

4.完成。如今mySubscriber訂閱了myObservable,myObservable就是調用mySubscriber對象的onNext和onComplete方法,mySubscriber就會打印出Hello World!

 

 

以上是簡單的RxJava的用法,下面來看一下MovieGuide中是如何使用RxJava:

在MovieGuide中,RxJava主要在迭代器類中使用

//todo

相關文章
相關標籤/搜索