介紹
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 |