RxAndroid/java小記

來源:互聯網
上載者:User

標籤:error:   editable   解決   view   任務   scheduler   看到了   處理   put   

 

Rxandroid

作為一個在設計模式中能把MVP發揮的淋漓盡致的架構不去學習感覺真的對不起自己,然後也學點新東西吧,響應式編程,MVP觀察者模式,然後使用RxAndroid使我們自己的代碼更加簡潔

然後昨天看了一個文章說,介面調用頻繁使用的話會使你的整個代碼看起來非常難以理解,其實想想也是,一個讀者看到了你的代碼,然後卻發現你的代碼裡充斥著介面回調,哎,這時候

他就需要尋找你這個介面到底回調到了哪裡(想想也是這個道理啊);

所以Rx(Android、java)系列很好解決了這個問題,我也是昨天才意識到,因為你可以把所需要執行的任務和任務產生的回調放在同一個地方,然後這個時候,就不需要找來找去了吧

一目瞭然,任務(耗時任務或者不耗時任務)執行地,任務傳回值以及後續的處理都以鏈式的形式調用;

MVP是啥

即Model view Presenter,

mvp模式可以分離顯示層和邏輯層,他們之間通過介面進行通訊(好像我之前很多都是用介面通訊的誒!冥冥中也有用到mvp模式),降低耦合;

可以看出Presenter分別和Model和view互動,而view和Model之間並沒有直接聯絡

這樣隨著我們的業務在拓展然後UI改變的話,或者商務邏輯改變UI也有修改的話,如果不分開,那將是一件非常頭疼的事,因為你都要兩者兼顧,但是現在你只需要

專心專註於UI介面或者商務邏輯的修改了!嗯 ,差不多MVP就是這個好處吧

然後是RxAndroid

rxandroid是rxjava的擴充,然後使用起來的話有提供很多方法給我們進行任務的操作

如just,map,fromCallable等。然後是兩個重要的類Observable(事件發行者,被觀察者),Observer(觀察者,事件訂閱者,Subscription(事件訂閱者)。

just方法使用

just方法適用於不耗時的任務,同步方法

//事件發行者    Observable<String> listObservable;/**just測試,這裡的getString是一個簡單的返回String的函數(不貼出來)*/     listObservable = Observable.just(getString());listObservable.subscribe(new Observer<String>() {            @Override            public void onCompleted() {                Log.v("test","OnCompleted");            }            @Override            public void onError(Throwable e) {                Log.v("test","OnError"+e);            }            @Override            public void onNext(String s) {                textView.setText(s);                Log.v("test","OnNext:------"+s);            }        });

如上代碼just()方法參數內可以傳入一個值,值的類型由事件發行者在定義時規定,應與其保持一致。值擷取成功後將通知onNext函數“發布”。

然後我們就可以在onNext函數進行相關操作了。這是簡單的使用,然而rxandroid精髓之處在於對線程的操作(雖然我會說,但是感覺還是沒有完全理解)

fromCallable()方法

just方法只是一個基礎的方法,然而在實際情況中我們會有很多耗時的操作比如,網路請求,比如資料庫儲存等等,這個時候我們就需要用到非同步方法

fromcallbale用法和just類似,但是多了些控制線程的東西

/**長時間耗時任務測試*/        listObservable = Observable.fromCallable(new Callable<String>() {            @Override            public String call() throws Exception {                return getStringLongTime();            }        });Subscription mtvSubscription = listObservable                .subscribeOn(Schedulers.io())  //指定Observable中的方法啟動並執行線程                .observeOn(AndroidSchedulers.mainThread())//指定onNext運行線程                .subscribe(new Observer<String>() {                    @Override                    public void onCompleted() {                        Log.v("test_CallAble","OnCompled:------");                    }                    @Override                    public void onError(Throwable e) {                        Log.v("test_CallAble","OnError:------"+e);                    }                    @Override                    public void onNext(String s) {                        textView.setText(s);                        Log.v("test_CallAble","OnNext:------"+s);                    }                });

被觀察者new了一個Callable的執行個體,裡面運行長時間耗時任務,完成後將非同步通知觀察者的OnNext方法

subscribOn是指定Observable啟動並執行線程

observeOn是指定觀察者OnNext方法所執行的線程

map方法

這裡copy一下大神的代碼過來,表述了map的使用方法,自行領會 debounce設定延遲時間

mTextWatchSubscription = mSearchResultsSubject    .debounce(400, TimeUnit.MILLISECONDS)//設定400毫秒等待時間    .observeOn(Schedulers.io())    .map(new Func1<String, List<String>>() {        @Override         public List<String> call(String s) {             return mRestClient.searchForCity(s);         }     })    .observeOn(AndroidSchedulers.mainThread())    .subscribe(new Observer<List<String>>() {         @Override         public void onCompleted() { }        @Override         public void onError(Throwable e) { }         @Override        public void onNext(List<String> cities) {            handleSearchResults(cities);         }    });mSearchInput.addTextChangedListener(new TextWatcher() {    @Override     public void beforeTextChanged(CharSequence s, int start, int count, int after) { }    @Override     public void onTextChanged(CharSequence s, int start, int before, int count) {        //有text改變時,調用onNext方法        mSearchResultsSubject.onNext(s.toString());     }    @Override     public void afterTextChanged(Editable s) { } });

圖片引用自:Android 源碼 設計模式 解析與實戰 【何紅輝,關愛民著】

部分代碼copy自部落格園還沒好好感受年輕

 

RxAndroid/java小記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.