RxJava 入門須知

介紹

Rx 是一個函數庫,讓開發者可以利用可觀察序列和LINQ風格查詢操作符來編寫異步和基於事件的程序,使用Rx,開發者可以用Observables表示異步數據流,用LINQ操作查詢符查詢異步數據流,用Scheduler參數化異步數據流的併發處理。

RxJava可以這樣定義:Rx = Observables + LINQ + Schedulers

Rx是一個使用可觀察數據流進行異步編程的編程接口,Rx結合了觀察者模式、迭代器模式和函數式編程的精華。

什麼是LINQ風格?

LINQ是另外一種數據抽象層;
LINQ是所有類型數據的統一編程模型,它可以讓你使用一致的模型查詢和使用數據,而不用關心數據源是什麼。

什麼是迭代器模式?

***迭代器模式***就是分離了集合對象的遍歷行爲,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部代碼透明地訪問集合內部的數據。

什麼是函數式編程?

***函數式編程***關心類型(代數結構)之間的關係
***命令式編程***關心解決問題的步驟


專業名詞解釋

名詞或類 解釋
Reactive 直譯爲反應性的,有活性的,根據上下文一般翻譯爲反應式、響應式
Iterable 可迭代對象,支持以迭代器的形式遍歷,許多語言中都存在這個概念
Observable 可觀察對象,在Rx中定義爲更強大的Iterable,在觀察者模式中是被觀察的對象,一旦數據產生或發生變化,會通過某種方式通知觀察者或訂閱者
Observer 觀察者對象,監聽Observable發射的數據並做出響應,Subscriber是它的一個特殊實現
emit 直譯爲發射、發佈、發出,含義是Observable在數據產生或變化時發送通知給Observer,調用Observer對應的方法,文章裏一律譯爲發射
items 譯爲項目,條目,在Rx裏是指Observable發射的數據項,文章裏一律譯爲數據,數據項
backpressure背壓 數據流發射,處理,響應可能在各自的線程中獨立進行,上游在發射數據的時候,不知道下游是否處理完,也不會等下游處理完之後再發射。
這樣,如果上游發射的很快而下游處理的很慢,會怎樣呢?

數據流通過異步步驟運行時,這種情況將會產生很多下游沒來得及處理的數據,這些數據既不會丟失,也不會被垃圾回收機制回收,而是存放在一個異步緩存池中,如果緩存池中的數據一直得不到處理,越積越多,最後就會造成內存溢出,這便是RxJava中的背壓問題。
RxJava中,專用Flowable類指定支持背壓,Observable專門用於非背壓操作(短序列、GUI交互等)。其它類型Single,Maybe和Completable不支持背壓,也不應該支持背壓,總是有空間暫時存放一個item項目
upStream,downStream
上游和下游
RxJava中的數據流包括一個源、0個或多箇中間步驟,後跟數據使用者或組合步驟(其中該步驟負責通過某種方式使用數據流)

例:**source.operator1().operator2().operator3().subscribe(consumer);**

operator1是operator2的上游
operator3是operator2的下游
consumer表達了用戶/消費者的權利 |
| “冷”與“熱” | 從Observable什麼時候開始發射數據序列上看:

冷的Observable -> 等待訂閱纔開開始發射數據

      熱的`Observable`  ->  無需等待訂閱,直接發射item |
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章