RxJava使用(一)基礎使用

RxJava是什麼?

如果非要用一句話來概括的話,那就是RxJava是一個異步操作。

RxJava是一個和handler以及AscyTask一樣的可以控制線程操作線程的一個異步操作。

 

既然RxJava和Handler以及AscyTask效果一樣,那爲什麼要使用RxJava而不是乾脆直接使用Handler或者AscyTask吶?

這個原因有兩點。

第一,RxJava的操作簡潔。這裏需要說明一下,這裏說的簡潔是指邏輯上的簡潔,並非一些人想象中的少寫很多代碼那種簡潔。

第二,RxJava擁有一系列強大方便的操作符,可以完成很多以前需要複雜代碼才能夠完成的操作。這點Handler和AscyTask根本做不到RxJava這麼好。

 

RxJava採用的是觀察者模式,代碼結構是一個響應式鏈式編程。

什麼是觀察者模式?

舉個例子,警察抓小偷。法律講究後發制人。當一個小偷還沒有偷東西的時候,警察是拿他沒辦法的,但是警察會死死盯着他,一旦他偷了東西便立馬抓獲他。觀察者模式也是如此。

RxJava中,也是採用觀察者模式來設計的。裏面有三個身份,觀察者(Observer)、被觀察者(Observable)、訂閱(Subscribe)。其中觀察者代表警察,被觀察者代表小偷,兩者通過訂閱聯繫在一起。指定了這個警察每天24小時專門觀察這個小偷的一舉一動,如果開始偷東西,便將其抓獲。

例子:

首先添加依賴

compile 'io.reactivex.rxjava2:rxjava:2.1.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

 

 

 

//被觀察者
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
//在這裏可以做一些數據獲取操作,然後將獲取的數據處理之後通過onNext方法發射出去
                e.onNext("aaa");
                e.onNext("bbb");
                e.onNext("ccc");
                e.onComplete();
                
            }
        });
        
        
        //觀察者
        Observer<String> observer = new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                
            }

            @Override
            public void onNext(String s) {
                Log.i("結果:" ,s);
                Log.i("結果:" ,s);
                Log.i("結果:" ,s);
                Log.i("結果:" ,s);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
                Log.i("結束啦","結束啦");
            }
        };
        
        //綁定
        observable.subscribe(observer);

 

分析上面的代碼。被觀察者(Observable)通過create()方法創建一個subscribe()方法,裏面有個參數ObservableEmitter,這個可以稱之爲發射器,這個發射器有三個方法。onNext()、onComplete()、onError()。

 

onNext():

向Observe(觀察者) onNext(Object s)方法中發射內容,觀察者拿到這個內容之後可以隨意操作。

onComplete():

當observable(被觀察者)將數據都發送完成之後就可以使用這個方法,代表結束。observer會在onComplete()中回調。我們可以將加載dialog的結束動效放在這個裏面

onError():

顧名思義,當出現問題的時候回調這個方法。

最後通過subscribe產生聯繫,即所謂的訂閱。

一般我們在使用的時候都是採用鏈式結構來使用:

 Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                //發射數據
                e.onNext("111");
                e.onNext("222");
                e.onNext("333");
                e.onComplete();
            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
                //初始化或者加載數據 
            }

            @Override
            public void onNext(String s) {
                Log.i("接受數據",s);
                Log.i("接受數據",s);
                Log.i("接受數據",s);
                
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
                Log.i("接收完成","finish");
            }
        });

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章