1.本文僅基于RxJava2.0、Retrofit2.0(引入背壓)
當下Rxjava,Retrofit已成項目標配瓶殃,為了提升自己逼格苛白,本人最近也重新加入Rx大隊伍中,其實一年前就使用過Rxjava1憔涉、Retrofit寫過項目,但是后來因為種種原因锅尘,沒能繼續(xù)探索下去监氢,現(xiàn)如今重新拾起布蔗,希望能有一個好的結果藤违。
RxJava引入的目的:異步,代碼更清晰
?????? 優(yōu)點:采用觀察者模式鏈式調用纵揍,簡潔明了顿乒,以往實現(xiàn)子線程主線程切換需自己手動new Thread(推薦線程池),并且線程之間還需要使用handler進行通信泽谨,Rxjava一步到位璧榄,極其簡單
1.基礎概念:
Observable:在觀察者模式中稱為“被觀察者”特漩;
Observer:觀察者模式中的“觀察者”,可接收Observable發(fā)送的數(shù)據(jù)骨杂;
subscribe:訂閱涂身,觀察者與被觀察者,通過subscribe()方法進行訂閱搓蚪;
Subscriber:也是一種觀察者蛤售,在2.0中 它與Observer沒什么實質的區(qū)別,不同的是 Subscriber與??? Flowable(也是一種被觀察者)聯(lián)合使用妒潭,該部分內容是2.0新增的悴能,后續(xù)文章再介紹。
Flowable:也是悲觀餐者的一種雳灾,與Subscriber進行配合使用漠酿,實現(xiàn)背壓操作
總結:觀察者訂閱被觀察者,Obsesrver用于訂閱Observable,而Subscriber用于訂閱Flowable
具體可以解釋為:A 對象(觀察者)對 B 對象(被觀察者)的某種變化高度敏感谎亩,需要在 B 變化的一瞬間做出反應炒嘲。
注意:Observer是個接口,Observable是個類团驱。
RxJava的異步實現(xiàn)方式:讓Observable (被觀察者)開啟子線程執(zhí)行耗操作摸吠,完成耗時操作后,觸發(fā)回調嚎花,通知Observer (觀察者)進行主線程UI更新寸痢。如此輕松便可以實現(xiàn)Android中的異步,且代碼簡潔明了紊选,集中分布啼止。RxJava中默認Observer (觀察者)和Observable (被觀察者)都在同一線程執(zhí)行任務。
2.RxJava常用操作符
操作符就是用于在Observable和最終的Observer之間兵罢,通過轉換Observable為其他觀察者對象的過程献烦,修改發(fā)出的事件,最終將最簡潔的數(shù)據(jù)傳遞給Observer對象
map()操作符卖词,就是把原來的Observable對象轉換成另一個Observable對象巩那,同時將傳輸?shù)臄?shù)據(jù)進行一些靈活的操作,方便Observer獲得想要的數(shù)據(jù)形式此蜈。
flatMap()操作符 返回任何它想返回的Observable對象即横。
filter()操作符 過濾出想要的
take()操作符:輸出最多指定數(shù)量的結果
doOnNext()允許我們在每次輸出一個元素之前做一些額外的事情
3.Scheduler(調度器)切換線程
Schedulers.immediate(): 直接在當前線程運行,相當于不指定線程裆赵。默認的
Schedulers.newThread(): 總是啟用新線程东囚,并在新線程執(zhí)行操作。
Schedulers.io(): I/O 操作(讀寫文件战授、讀寫數(shù)據(jù)庫页藻、網絡信息交互等)所使用的 Scheduler桨嫁。能夠重用空閑的線程
Schedulers.computation(): 計算所使用的 Scheduler。這個計算指的是 CPU 密集型計算份帐,即不會被 I/O 等操作限制性能的操作璃吧,例如圖形的計算。
AndroidSchedulers.mainThread()废境,它指定的操作將在 Android 主線程運行肚逸。
subscribeOn(): 指定Observable(被觀察者)所在的線程,或者叫做事件產生的線程彬坏。
observeOn(): 指定 Observer(觀察者)所運行在的線程朦促,或者叫做事件消費的線程。
4.Flowable與Subscriber
BackpressureStrategy.ERROR 在ERROR策略下栓始,如果緩存池溢出务冕,就會立刻拋出MissingBackpressureException異常
BackpressureStrategy.BUFFER 支持存很多很多的數(shù)據(jù),不會產生OOM,總之BUFFER要慎用
BackpressureStrategy.DROP 當消費者處理不了事件,就丟棄幻赚。
BackpressureStrategy.LATEST 與DROP功能基本一致,唯一的區(qū)別就是LATEST總能使消費者能夠接收到生產者產生的最后一個事件禀忆。
具體使用:
一.導入配置,使用 Gradle 方式添加依賴:
二落恼、創(chuàng)建retrofit
1)因為需要跟okhttp配合使用箩退,故先創(chuàng)建okhttpclient
2)創(chuàng)建retrofit
3)定義具體邏輯接口和bean對象
4)最后就可以愉快的使用啦
后續(xù)會推出更多相關文章!