RxJava基礎使用(一)

funnyok發表於2021-09-09

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 observable = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
//在這裡可以做一些資料獲取操作,然後將獲取的資料處理之後透過onNext方法發射出去
                e.onNext("aaa");
                e.onNext("bbb");
                e.onNext("ccc");
                e.onComplete();

            }
        });

        //觀察者
        Observer observer = new Observer() {
            @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() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                //發射資料
                e.onNext("111");
                e.onNext("222");
                e.onNext("333");
                e.onComplete();
            }
        }).subscribe(new Observer() {
            @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");
            }
        });

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2808561/,如需轉載,請註明出處,否則將追究法律責任。

相關文章