Android 勤用RXJava compose操作符消除重複代碼

來源:互聯網
上載者:User

標籤:map   使用   sch   public   重寫   一行代碼   網路   for   鏈式   

相信小夥伴在使用RXJava與Retrofit請求網路時,都有遇到過這樣的情境,在IO線程請求網路解析資料,接著返回主線程setData、更新View試圖,那麼也肯定熟悉下面這幾句代碼:

.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(subscriber);

如果網路請求的次數比較少, 作為一名不拘小節(懶癌)的中二青年還能勉強接受複製粘貼上述切換schedulers的代碼,但是如果請求網路的biz次數多起來了,又不想去破環RX的鏈式結構,那麼怎麼辦呢?其實使用compose操作符每次僅書寫一行代碼就能完成背景工作執行緒的切換了!

先看最終效果:

RetrofitClient.singletonDemoService("http://gank.io/api/random/data/").requestNet("福利","1").compose(schedulersTransformer()).subscribe(subscriber);

僅僅通過.compose(schedulersTransformer())一行代碼就完成了線程切換。

簡單囉嗦下compose操作符的原理 :

不同於map、flatMap等lift操作改變Observable發布的事件及序列,compose操作符是直接對當前Observable進行操作(可簡單理解為不停地.方法名().方法名()鏈式操作當前Observable),所以我們自然可以把切換線程的操作加入這裡。

那麼動手吧~
  • 1.首先compose()需要傳入一個Observable.Transformer類型的參數,那我們直接在這new一個即可;

  • 2.在上述transformer對象裡,我們通過重寫call 方法,可以拿到一個observable對象,對其進行一系列的lift變換(自然可以切換線程);

    Observable.Transformer schedulersTransformer() {        return new Observable.Transformer() {            @Override            public Object call(Object observable) {                return ((Observable)  observable).subscribeOn(Schedulers.io())                        .unsubscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread());            }        };    }
  • 3.收工吃飯~
observable.compose (schedulersTransformer()).subscribe(subscriber)

Android 勤用RXJava compose操作符消除重複代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.