java obervable_RxJava中Observable,Completable和Single之间有什么区别
Observable 是通用ReactiveX構(gòu)建塊,它是隨時(shí)間發(fā)送值的事件源 . (因此存在ReactiveX擴(kuò)展到的每種語(yǔ)言)
簡(jiǎn)而言之,Observable事件是:
onNext *(onCompleted | onError)? /(*零或更多? - 零或1)
Single和Completable是RxJava獨(dú)家推出的新類型,它們代表減少類型的 Observable ,具有更簡(jiǎn)潔的API .
Single 表示發(fā)出單個(gè)值或錯(cuò)誤的 Observable .
Completable 表示 Observable ,它不會(huì)發(fā)出任何值,但只會(huì)發(fā)出終端事件 onError 或 onCompleted
你可以想到差異,比如返回的方法的差異:
對(duì)象集合 - 可觀察
單個(gè)對(duì)象 - 單個(gè)
和不返回值的方法(void方法) - 可完成 .
當(dāng)你有面向任務(wù)的Observable并且你期望單個(gè)值,例如執(zhí)行一次的網(wǎng)絡(luò)請(qǐng)求并返回值(或錯(cuò)誤)時(shí), Single 可能是合適的,網(wǎng)絡(luò)調(diào)用是一次性操作的,這意味著你不希望它返回額外的隨時(shí)間變化的 Value 另一個(gè)例子是DB獲取數(shù)據(jù)操作 .
Completable 適用于 Observable 并且你沒有't care about the value resulted from the operation, or there isn' t . 例如,更新緩存,操作可以成功/失敗,但沒有值 .
另一個(gè)例子是一些長(zhǎng)時(shí)間運(yùn)行的init操作,它不會(huì)返回任何內(nèi)容 . 它可以是僅通過(guò)成功指示產(chǎn)生的UPDATE / PUT網(wǎng)絡(luò)呼叫 .
在任何情況下,Completable和Single都沒有添加新功能,但它們引入了更強(qiáng)大和簡(jiǎn)潔的API,它們更多地講述了API暴露的Observable背后的操作 .
Edit:
RxJava2可能:
RxJava2添加了一個(gè)名為 Maybe 的新類型, Maybe 是 Completable 和Single的組合 .
在上面這樣的語(yǔ)言中, Maybe 可以被認(rèn)為是一種返回某種類型的 Optional 的方法, Optional 是一個(gè)圍繞Object的包裝器,它明確告訴我們是否有一些值 - Object 或不是(而不是null) .
使用 Maybe ,我們可以擁有與 Single 完全相同的值,或者不返回任何內(nèi)容 - 就像 Completable 一樣 . 另外,和兩者一樣,我們有錯(cuò)誤 .
當(dāng)我們想要標(biāo)記 Observable 可能沒有值并且只是完成時(shí), Maybe 很有 Value .
一個(gè)例子將從緩存中獲取,我們不一定在緩存中有一個(gè)值,所以在這種情況下,我們將完成,o.w . 我們將從緩存中獲取 onNext .
這也值得使用RxJava2處理流中的非空值 .
RxJava2 Flowable:
首先,讓我們來(lái)定義背壓 . Backpressure是一種處理數(shù)據(jù)生成速度快于處理速度的方法 . Flowable 具有背壓支持,允許下游請(qǐng)求物品 . 您可以閱讀有關(guān)差異的更多信息here .
總結(jié)
以上是生活随笔為你收集整理的java obervable_RxJava中Observable,Completable和Single之间有什么区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串类型_Python3的
- 下一篇: 控制台启动jar包关闭控制台怎么关jav