一、前言

        RxJava 對(duì)大家而言肯定不陌生,其受歡迎程度不言而喻。而在去年的早些時(shí)候,官方便宣布,將在一段時(shí)間后不再對(duì) RxJava 1.x 進(jìn)行維護(hù),而在倉(cāng)庫(kù)中另辟蹊徑,開(kāi)始對(duì) RxJava 2.x 進(jìn)行推廣起來(lái),我原本是不想寫(xiě)這么一套教程的,因?yàn)?RxJava 受歡迎度這么高,而且這2.x也出來(lái)了這么久,我堅(jiān)信網(wǎng)上一定有很多超級(jí)大牛早已為大家避雷。然而很難過(guò)的是,我搜索了些時(shí)間,能搜出來(lái)的基本都是對(duì) RxJava 1.x 的講解,或者是 Blog 標(biāo)題就沒(méi)說(shuō)清楚是否是2.x系列(對(duì)于我們這種標(biāo)題黨來(lái)說(shuō)很難受)。這不,我就來(lái)拋磚引玉了。

      咱們先不提別的,先為大家?guī)c(diǎn)可能你早已熟知的干貨——來(lái)自扔物線(xiàn)大神的給Android開(kāi)發(fā)者的RxJava詳解。

      該文詳細(xì)地為大家講解了 RxJava 的優(yōu)勢(shì)、原理以及使用方式和適用情景,一定被眾多的Android開(kāi)發(fā)者視為神器??上?,文章歷史比較久遠(yuǎn),基本都是講解的RxJava 1.x了。

      那關(guān)注的小伙伴一定會(huì)問(wèn),那我沒(méi)用過(guò) RxJava 1.x ,還有必要先學(xué)習(xí) 1.x 的內(nèi)容嗎?

      個(gè)人覺(jué)得不必要,因?yàn)镽xJava 2.x 是按照Reactive-Streams specification規(guī)范完全的重寫(xiě)的,完全獨(dú)立于RxJava 1.x 而存在,它改變了以往RxJava的用法。

      額,由于個(gè)人能力水平有限,所以對(duì)于英文基礎(chǔ)好的,大家可以去官網(wǎng)查閱相關(guān)API介紹,而對(duì)于英文不那么流暢的童鞋,我也為大家準(zhǔn)備了干貨:RxJava2Examples (正在更新)。

回到頂部

二、與RxJava 1.x的差異

     其實(shí),我標(biāo)題為入門(mén)教程,按理說(shuō)應(yīng)該從簡(jiǎn)單入門(mén)開(kāi)始講的,原諒我突然偏題了,因?yàn)槲矣X(jué)得可能大多數(shù)人都了解或者使用過(guò)RxJava 1.x(因?yàn)樗娴奶袅耍?。雖然可能熟悉1.x 的你可以直接扒文檔就可以了,但這么大的變化,請(qǐng)?jiān)徫疫€在這里瞎比比。

    1、Nulls

      這是一個(gè)很大的變化,熟悉RxJava 1.x的童鞋一定都知道,1.x 是允許我們?cè)诎l(fā)射事件的時(shí)候傳入 null 值的,但現(xiàn)在我們的 2.x 不支持了,不信你試試? 大大的 NullPointerException 教你做人。這意味著 Observable<Void> 不再發(fā)射任何值,而是正常結(jié)束或者拋出空指針。

     2、Flowable 

     在 RxJava 1.x 中關(guān)于介紹 backpressure 部分有一個(gè)小小的遺憾,那就是沒(méi)有用一個(gè)單獨(dú)的類(lèi),而是使用 Observable 。而在 2.x 中 Observable 不支持背壓了,將用一個(gè)全新的 Flowable 來(lái)支持背壓。

    Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

        或許對(duì)于背壓,有些小伙伴們還不是特別理解,這里簡(jiǎn)單說(shuō)一下。大概就是指在異步場(chǎng)景中,被觀察者發(fā)送事件的速度遠(yuǎn)快于觀察者的處理速度的情況下,一種告訴上游的被觀察者降低發(fā)送速度的策略。感興趣的小伙伴可以模擬這種情況,在差距太大的時(shí)候,我們的內(nèi)存會(huì)猛增,直到OOM。而我們的 Flowable 一定意義上可以解決這樣的問(wèn)題,但其實(shí)并不能完全解決,這個(gè)后面可能會(huì)提到。

     3、Single/Completable/Maybe

       其實(shí)這三者都差不多,Single 顧名思義,只能發(fā)送一個(gè)事件,和 Observable 接受可變參數(shù)完全不同。而Completable 側(cè)重于觀察結(jié)果,而Maybe 是上面兩種的結(jié)合體。也就是說(shuō),當(dāng)你只想要某個(gè)事件的結(jié)果(true or false)的時(shí)候,你可以使用這種觀察者模式。

    4、線(xiàn)程調(diào)度相關(guān)

 

       這一塊基本沒(méi)什么改動(dòng),但細(xì)心的小伙伴一定會(huì)發(fā)現(xiàn),RxJava 2.x 中已經(jīng)沒(méi)有了Schedulers.immediate() 這個(gè)線(xiàn)程環(huán)境,還有Schedulers.test()。

    5、Function相關(guān)

      熟悉 1.x 的小伙伴一定都知道,我們?cè)?.x 中是有Func1,F(xiàn)unc2.....FuncN的,但2.x 中將它們移除,而采用Function 替換了Func1,采用BiFunction 替換了Func 2..N。并且,它們都增加了throws Exception,也就是說(shuō),媽媽再也不用擔(dān)心我們做某些操作還需要try-catch了。

    6、其他操作符相關(guān)

      如Func1...N 的變化,現(xiàn)在同樣用Consumer和BiConsumer對(duì)Action1 和Action2進(jìn)行了替換。后面的Action都被替換了,只保留了ActionN。

    Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

回到頂部

三、附錄

         下面從官方截圖展示 2.x 相對(duì) 1.x 的改動(dòng)細(xì)節(jié),僅供參考。

 Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 


作  者: 南 塵   Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn) 
出  處: http://www.cnblogs.com/liushilin/ 
關(guān)于作者:專(zhuān)注于移動(dòng)前端的項(xiàng)目開(kāi)發(fā)。如有問(wèn)題或建議,請(qǐng)多多賜教!歡迎加入Android交流群:118116509 
版權(quán)聲明:本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文鏈接。 
特此聲明:所有評(píng)論和私信都會(huì)在第一時(shí)間回復(fù)。也歡迎園子的大大們指正錯(cuò)誤,共同進(jìn)步?;蛘?a style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); text-decoration-line: none;">直接私信我 
聲援博主:如果您覺(jué)得文章對(duì)您有幫助,可以點(diǎn)擊文章下部推薦或側(cè)邊關(guān)注。您的鼓勵(lì)是作者堅(jiān)持原創(chuàng)和持續(xù)寫(xiě)作的最大動(dòng)力! 

http://www.cnblogs.com/liushilin/p/7058302.html