Rxjava概念溫習篇

Rxjava是基于jvm的可觀測序列的處理異步事件的程序庫。其基本理念是被觀察者(observable)發(fā)送數(shù)據(jù),這些數(shù)據(jù)通過被觀察者調(diào)用操作符處理,然后這些被處理過的數(shù)據(jù)發(fā)送給訂閱了的觀察者(Observer)。共有五種基本類型(observable)可以使用操作符:

  • Flowable 能發(fā)送0到n個項目,支持響應流和背壓
  • Observable 能發(fā)送0到n個項目,不支持背壓
  • Single 僅支持返回一個項目或者一個錯誤
  • Completable 沒有返回,僅僅只有完成或者錯誤,相當于void
  • Maybe 能夠發(fā)射0或者1個數(shù)據(jù),要么成功,要么失敗。

由于subject繼承了被觀察者(observable),實現(xiàn)了觀察者(observer)接口,因此subject既可以被認為是觀察者,也可以被認為是被觀察者。因此通過subject訂閱被觀察者,就可以實現(xiàn)cold observable到hot observable的轉換。

背壓就是生產(chǎn)的數(shù)據(jù)太快了,而消費者處理不了那么快。那么就讓生產(chǎn)者低速生產(chǎn)的方式。也可以通過其他方案解決搜索框延遲搜索的問題,sample,throttle 都有類似debounce的這個功能。如果想要收集中間的變化結果,可以使用buffer或者window。

interval不支持背壓,而range支持背壓,支持背壓則可以通過request()操作符進行限制。是否支持背壓涉及到Cold ObservablesHot Observables,前者表示在訂閱之后才開始發(fā)送事件的Observable。后者表示不管是否訂閱,創(chuàng)建就會發(fā)送事件的。cold Observables 中也有不支持背壓的(interval ,timer),hot Observables則都不支持背壓。

subject的子類有下面幾種,他們也都同時具有觀察者和被觀察者的身份:

  • publishSubject只會把在訂閱發(fā)生的時間點之后來自原始Observable的數(shù)據(jù)發(fā)射給觀察者。
  • ReplaySubject會發(fā)射所有來自原始Observable的數(shù)據(jù)給觀察者,無論它們是何時訂閱的。
  • BehaviorSubject 當被訂閱時,它開始發(fā)射原始Observable最近發(fā)射的數(shù)據(jù)(如果此時還沒有收到任何數(shù)據(jù),它會發(fā)射一個默認值),然后繼續(xù)發(fā)射其它任何來自原始Observable的數(shù)據(jù)。
  • AsyncSubject只在原始Observable完成后,發(fā)射來自原始Observable的最后一個值。
  • SerializedSubject 同時保證只有一個線程操作,但不保證所有操作都是同一個線程。

Rxjava是觀察者模式和迭代器模式相結合的函數(shù)式編程的精華。

迭代器模式是消費者從生產(chǎn)者那里pull拉取數(shù)據(jù),線程阻塞直到數(shù)據(jù)準備好。observable則是在數(shù)據(jù)準備好后,生產(chǎn)者將數(shù)據(jù)推送給消費者。這里的迭代器模式理解為生產(chǎn)消費模式更好。生產(chǎn)消費模式中間采用了阻塞隊列來緩沖。

明白了觀察者和被觀察者之間的關系之后,就是如何應用操作符了。操作符講解,可以查看文檔。

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

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應式編程作為結合使用的,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,987評論 0 10
  • 作者: maplejaw本篇只解析標準包中的操作符。對于擴展包,由于使用率較低,如有需求,請讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 46,216評論 8 93
  • RxJava技術分享 京金所—時光 2016.9.22 這里我拿出來給 Android 開發(fā)者的 RxJava 詳...
    JC_Mobile閱讀 5,676評論 3 55
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個ObservableEm...
    rkua閱讀 1,957評論 0 1
  • 響應式編程簡介 響應式編程是一種基于異步數(shù)據(jù)流概念的編程模式。數(shù)據(jù)流就像一條河:它可以被觀測,被過濾,被操作,或者...
    說碼解字閱讀 3,558評論 0 5

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