ReactiveX和Observable

1.什么是ReactiveX(下面簡(jiǎn)稱Rx)?
Rx是一個(gè)編程模型,目標(biāo)是提供一致的編程接口,幫助開發(fā)者更方便的處理異步數(shù)據(jù)流
使用Rx,開發(fā)者可以用Observables表示異步數(shù)據(jù)流,用LINQ(讀作Link)操作符查詢異步數(shù)據(jù)流, 用Schedulers參數(shù)化異步數(shù)據(jù)流的并發(fā)處理,Rx可以這樣定義:Rx = Observables + LINQ + Schedulers。

2.優(yōu)點(diǎn)
①可組合:一般Java處理有先后順序的并發(fā)請(qǐng)求的時(shí)候會(huì)涉及到嵌套回調(diào),這樣代碼就會(huì)變成一層一層的,不僅不美觀,而且也不容易維護(hù) Rx將異步調(diào)用封裝成Observable,開發(fā)者可以非常方便的在中途操作數(shù)據(jù)流
②輕松處理并發(fā):使用其Scheduler可以非常方便的切換數(shù)據(jù)流執(zhí)行的線程

3.Rx是基于觀察者模式的,觀察者就像一個(gè)哨兵,他負(fù)責(zé)訂閱觀察者對(duì)象。你可以定義一種獲取和變換數(shù)據(jù)的機(jī)制,當(dāng)數(shù)據(jù)就緒的時(shí)候,這種機(jī)制就會(huì)分發(fā)數(shù)據(jù)給觀察者哨兵。

傳統(tǒng)的方法調(diào)用模型是這樣的,你通過調(diào)用一個(gè)方法,這個(gè)方法返回一些數(shù)據(jù)給你,然后你用這個(gè)返回的數(shù)據(jù)做一些事情
但是Rx的異步模型是,【你將這個(gè)異步調(diào)用本身定義為一個(gè)Observable】,觀察者通過訂閱操作關(guān)聯(lián)到這個(gè)Observable。接下來,你可以繼續(xù)你的業(yè)務(wù)邏輯,當(dāng)方法返回的時(shí)候,Observable會(huì)發(fā)射結(jié)果,觀察者的方法就會(huì)處理結(jié)果

4.subscribe方法用于將觀察者連接到Observable,但是注意,這個(gè)方法是在Observable的調(diào)用鏈之中的,仔細(xì)想想也不難明白,因?yàn)楸挥^察者需要持有觀察者對(duì)象才能夠調(diào)用觀察者的方法來處理結(jié)果。一般來說,觀察者需要實(shí)現(xiàn)以下方法的子集:
①onNext(T item):
Observable調(diào)用這個(gè)方法發(fā)射數(shù)據(jù) 方法的參數(shù)就是Observable發(fā)射的數(shù)據(jù) 這個(gè)方法可能被調(diào)用多次 取決于具體的實(shí)現(xiàn)
②onError(Exception ex):
當(dāng)Observable遇到錯(cuò)誤或者無法返回期望的數(shù)據(jù)時(shí)會(huì)調(diào)用這個(gè)方法,這個(gè)調(diào)用會(huì)終止Observable,后續(xù)不會(huì)再調(diào)用onNext和onCompleted,onError方法的參數(shù)是拋出的異常。
③onComplete:
正常終止,如果沒有遇到錯(cuò)誤,Observable在最后一次調(diào)用onNext之后調(diào)用此方法。

5.Observables的"熱"和"冷":
一個(gè)"熱"的Observable可能一創(chuàng)建完就開始發(fā)射數(shù)據(jù),因此所有后續(xù)訂閱它的觀察者可能從序列中間的某個(gè)位置開始接受數(shù)據(jù)(有一些數(shù)據(jù)錯(cuò)過了)。
一個(gè)"冷"的Observable會(huì)一直等待,直到有觀察者訂閱它才開始發(fā)射數(shù)據(jù),因此這個(gè)觀察者可以確保會(huì)收到整個(gè)數(shù)據(jù)序列。
在一些ReactiveX實(shí)現(xiàn)里,還存在一種被稱作Connectable的Observable,不管有沒有觀察者訂閱它,這種Observable都不會(huì)開始發(fā)射數(shù)據(jù),除非Connect方法被調(diào)用。

6.ReactiveX真正強(qiáng)大的地方在于它的操作符,操作符讓你可以變換、組合、操縱和處理Observable發(fā)射的數(shù)據(jù)。

Rx的操作符讓你可以用聲明式的風(fēng)格組合異步操作序列,它擁有回調(diào)的所有效率優(yōu)勢(shì),同時(shí)又避免了典型的異步系統(tǒng)中嵌套回調(diào)的缺點(diǎn)。

下面是常用的操作符列表:

創(chuàng)建操作 Create, Defer, Empty/Never/Throw, From, Interval, Just, Range, Repeat, Start, Timer
變換操作 Buffer, FlatMap, GroupBy, Map, Scan和Window
過濾操作 Debounce, Distinct, ElementAt, Filter, First, IgnoreElements, Last, Sample, Skip, SkipLast, Take, TakeLast
組合操作 And/Then/When, CombineLatest, Join, Merge, StartWith, Switch, Zip
錯(cuò)誤處理 Catch和Retry
輔助操作 Delay, Do, Materialize/Dematerialize, ObserveOn, Serialize, Subscribe, SubscribeOn, TimeInterval, Timeout, Timestamp, Using
條件和布爾操作 All, Amb, Contains, DefaultIfEmpty, SequenceEqual, SkipUntil, SkipWhile, TakeUntil, TakeWhile
算術(shù)和集合操作 Average, Concat, Count, Max, Min, Reduce, Sum
轉(zhuǎn)換操作 To
連接操作 Connect, Publish, RefCount, Replay
反壓操作,用于增加特殊的流程控制策略的操作符

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對(duì)什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,975評(píng)論 0 10
  • RxJava技術(shù)分享 京金所—時(shí)光 2016.9.22 這里我拿出來給 Android 開發(fā)者的 RxJava 詳...
    JC_Mobile閱讀 5,670評(píng)論 3 55
  • 參考:給 Android 開發(fā)者的 RxJava 詳解-扔物線深入淺出RxJava 基礎(chǔ) "a library f...
    Vincen1024閱讀 575評(píng)論 0 1
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對(duì)于擴(kuò)展包,由于使用率較低,如有需求,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,188評(píng)論 8 93
  • 引言:學(xué)習(xí)了一下RxJava,理解其是一個(gè)以升級(jí)版的觀察者模式為核心的異步處理庫(kù)。旨在以更加簡(jiǎn)介、可讀性更強(qiáng)的代碼...
    androidjp閱讀 5,779評(píng)論 1 28

友情鏈接更多精彩內(nèi)容