RxJava 之 Hello World

原理介紹

什麼是RxJava

  • RxJava 就是異步
  • RxJava 的異步實現,是通過一種擴展的觀察者模式來實現的。
  • 一個響應式編程框架

觀察者模式應該不陌生,點這裏可以重溫一下概念。

RxJava組成

RxJava最核心的兩個東西是Observable(被觀察者,事件源)Subscriber(觀察者)
Observable發出一系列事件,Subscriber負責處理這些事件。

一個Observable可以發出零個或者多個事件,直到結束或者出錯。每發出一個事件,就會調用它的Subscriber的onNext方法,最後調用Subscriber.onComplete()或者Subscriber.onError()結束。

RxJava相較於傳統的觀察者模式,還有一個特點,就是沒有觀察者時,主題是不會發送事件的。也就說是當一個Observable連一個Subscriber都沒有時,Observable是不會發送事件的。這點和我們上學時,如果一節課一個學生都沒來聽課的話,那麼老師也不會去講課的道理是一樣的。

RxJava之Hello world

RxJava 是一個方便我們實現異步的框架。同時其“響應式編程”的思路,對於我們也是一種挑戰。在加上其各種強大的操作符調度器也是需要一定的學習成本的,姑且就把他當做一門“新的語言”,這裏我們就從輸出Hello world說起。

看到網上的許多教程都使用了Lambda語法進行編碼,這個Lambda雖然很好,但不想在學習RxJava的過程中,增加無畏的難度,所以暫時不採用,代碼暫時能看懂纔是最要的,好看後期再說!

工程導入

    compile 'io.reactivex:rxjava:1.1.7'
    compile 'io.reactivex:rxandroid:1.2.1'

完整版Hello World

/**
     * 被觀察者,事件源
     */
    private Observable<String> myObserveable;

    /**
     * 觀察者
     */
    private Subscriber<String> mySubscriber;

創建被觀察者

/**
     * 創建被觀察者Observable
     */
    private void InitObserverr() {
        myObserveable = Observable.create(
                new Observable.OnSubscribe<String>() {

                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        subscriber.onNext("hello world");
                        subscriber.onCompleted();
                    }
                }
        );
    }

創建觀察者

/**
     * 創建觀察者Subscribe
     */
    private void InitSubscriber() {
        mySubscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.e(MainActivity.class.getSimpleName(), "onNext--->" + s);
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
            }
        };
    }

觀察者訂閱主題(事件源/被觀察者)

myObserveable.subscribe(mySubscriber);

這句代碼按照“字面意思”,感覺是被觀察者訂閱了觀察者。但實際上,我們在這裏實現的是觀察者訂閱被觀察者(主題)。希望不要混淆,並習慣這個邏輯。

一旦mySubscriber訂閱了myObservable,myObservable就會調用mySubscriber對象的onNext和onComplete方法,mySubscriber就會打印出Hello World!這裏爲了方便測試,同時Toast了一個Hello World!

這個訂閱的實現,其實很關鍵。因爲我們前面說過,在RxJava中,沒有觀察者時,被觀察者是不會發布事件的

用強大的RxJava實現Hello World的打印,當然不是我們的初衷,這裏只是從最基本的用法做出介紹。

精簡版Hello world

簡化Observable

RxJava內置了很多簡化創建Observable對象的函數,比如Observable.just就是用來創建只發出一個事件就結束的Observable對象,上面創建Observable對象的代碼可以簡化爲一行

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

簡化Subscribe

有時候,我們其實並不關心OnComplete和OnError,我們只需要在onNext的時候做一些處理,這時候就可以使用Action1類。

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

subscribe 方法

subscribe方法有一個重載版本,接受三個Action1類型的參數,分別對應OnNext,OnComplete, OnError函數。

myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction);

這樣爲了僅僅輸出一個Hello World ,我們拋棄不重要的部分,代碼就可以簡化了:

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

好了,RxJava 基礎用法就到這裏了!


發佈了47 篇原創文章 · 獲贊 23 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章