1. 程式人生 > >RxJava學習並理解筆記(一)

RxJava學習並理解筆記(一)

作為菜鳥來講,看了好多的rxjava操作符,弄得我怕怕的,就怕自己堅持不住學習,所以,還是一步步來學習它吧,文章主要是記錄一下我學習rxjava的過程。

重點:rxjava的觀察者模式

程式中基於使用者的操作,資料的改變等因素,UI都會發生相應的變化

rxjava是一種非同步變化思想

舉個例子來說   

我在A店買了一件商品B   由快遞員C送到我的手上

 

從rxjava的思想上來看   

我 -----觀察者

商品----被觀察者

那麼快遞員充當了什麼職責呢?快遞員從事有序並準備的工作將商品送至我的手上  快遞員的舉動也就是充當一箇中介,

就相當於一個(觀察者模式)的維護者

 

具體來講 商品B(被觀察者)至我手上的過程我不必完全弄清楚 ,比如它經過哪裡,發生了什麼,我要的不過就是它的到達

所以我(觀察者)不可能隨時盯著它,我只有在需要的進候,我才會想要了解它,而瞭解的前提就是我已經付款有了瞭解它的資格,在模式中,被稱為 (訂閱),而當快遞到我手上以後,我就取消關注它的資訊,也就是解除訂閱。

 

我想了解商品進展,可以查詢或者致電給快遞員,如果 快遞員手機壞了,商品丟了,會onError;

商品一旦到了我的手上,會onCommplete;

快遞員給我送快遞的行為 ,onNext(),商品(被觀察者)正一點一點的 到達我的手上,到我手上之後的事情,我會自行處理

快遞員可是管不著的,所以一個完整的觀察者模式完成。

後期的操作,大家都懂得,拆快遞,用快遞,多開心啊,要乾的事可多了,但是這種行為就不是邏輯處理行為啦,是一種展示行為。

我經常使用MVP模式來操作專案,畫個圖圖

 這就是我對於rxjava思想的理解

我知道它有很多操作符,但是思想應該凌駕於行為之上,畢竟在起手一個專案之前,思考才是最重要的

 

 

第二點:為啥要用它呢?

如果說非同步  AsyncTask和Handler 都能非同步,rxjava沒出世以前 ,它倆就很流行

如果說鏈式 ,上面那兩個我用了以後,寫介面,也可以實現啊

 

所以說促使大家來學習的也就是後期的維護與管理

observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                       
                    }

                    @Override
                    public void onNext(String value) {
                       
                    }

                    @Override
                    public void onError(Throwable e) {
                       
                    }

                    @Override
                    public void onComplete() {
                      
                    }
                });

程式是不斷在變化的,可能需求天天有,天天改,減小改動的範圍和操作 是必然的  這就不得不說一下rxjava的一堆操作符了,

突然間覺得這堆操作符不是那麼可怕,各有 各的可愛之處

 

舉個小例子,領導分配任務,整個程式,展示一個咱們單位所有員工的精神面貌,沒問題

整個RecyclerView  ,展示一下員工的照片和基礎資訊

領導後期再提要求,大老爺們不要,可以,那我加個   if else

領導再說 歲數大的就算了吧 過40的不要展示了  要更有活力的 咋整 我再加條件判斷唄

改來改去 領導覺得人數太多  這麼的吧  你就給展示業績靠前幾個人就行啦 ,話說,你啥時候能改完  。。。。。。。。(真 的是生無可戀臉)

領導最後直接說了,我想要個動畫效果,隔一段時間展示一下,不難吧!儘量保證沒BUG啊         。。。。。。。。。。。(報告領導,我想去屎一下行不行)

 

瘋狂的進行 if else 判斷 ,再巢狀,再過幾個月 ,看一眼自己的程式碼,我都把自己看蒙了,不知道自己寫的是啥

所以,一個簡潔,清晰的程式碼對於後期維護和二次開發 是多麼的重要

做為程式設計師,從什麼時候可以不必要學習了呢,你寫完一個程式,過幾個月再看的時候,嘴裡會不自覺發生讚歎  那麼 你可以停止學習了,如果像我一樣 看自己程式碼都會蒙圈的,那麼下班後,少玩把遊戲,多多精盡技術吧!

 

向我上面舉的例子,使用 filter 和 ofType 等操作符可以讓人不蒙圈,這麼一想,突然覺得自己愛上它了

 

filter: 過濾資料。內部通過OnSubscribeFilter過濾資料。

  Observable.just(33,25,50,46)
            .filter(new Func1<Integer, Boolean>() {
                @Override
                public Boolean call(Integer integer) {
                    return integer<40;
                }
            })
    .subscribe(item->Log.d("JG",item.toString())); 

    過濾掉年齡可以這麼做  33,25就過濾出來了
ofType: 過濾指定型別的資料

Observable.just(1,1,"98")
            .ofType(Integer.class)
            .subscribe(item -> Log.d("JG",item.toString()));

take: 只發射開始的N項資料或者一定時間內的資料。

  Observable.just(3,4,5,6,9,9,8,7,5,5)
            .take(3)//發射前三個資料項
           
那我想它定時執行咋整,可以這樣

Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                emitter.onNext(999);
                sleep(4000);
                emitter.onNext(999);
            }
        }).observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                       
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                }, new Action() {
                    @Override
                    public void run() throws Exception {

                    }
                });

突然覺得自己愛它又多了一點點,動手來寫段乾淨利索的程式碼吧!