這可能是最好的RxJava 2.x 入門教程(一)

這可能是最好的 RxJava 2.x 入門教程系列專欄
文章鏈接:
這可能是最好的 RxJava 2.x 入門教程(完結(jié)版)【重磅推出】
這可能是最好的RxJava 2.x 入門教程(一)
這可能是最好的RxJava 2.x 入門教程(二)
這可能是最好的RxJava 2.x 入門教程(三)
這可能是最好的RxJava 2.x 入門教程(四)
這可能是最好的RxJava 2.x 入門教程(五)
GitHub 代碼同步更新:https://github.com/nanchen2251/RxJava2Examples
為了滿足大家的饑渴難耐,GitHub 將同步更新代碼,主要包含基本的代碼封裝,RxJava 2.x 所有操作符應(yīng)用場景介紹和實(shí)際應(yīng)用場景,后期除了 RxJava 可能還會增添其他東西,總之,GitHub 上的 Demo 專為大家傾心打造。傳送門:https://github.com/nanchen2251/RxJava2Examples

前言

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

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

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

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

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

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

與RxJava 1.x的差異

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

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

  • 2、Flowable
    在 RxJava 1.x 中關(guān)于介紹 backpressure 部分有一個(gè)小小的遺憾,那就是沒有用一個(gè)單獨(dú)的類,而是使用 Observable 。而在 2.x 中 Observable 不支持背壓了,將用一個(gè)全新的 Flowable 來支持背壓。
    或許對于背壓,有些小伙伴們還不是特別理解,這里簡單說一下。大概就是指在異步場景中,被觀察者發(fā)送事件的速度遠(yuǎn)快于觀察者的處理速度的情況下,一種告訴上游的被觀察者降低發(fā)送速度的策略。感興趣的小伙伴可以模擬這種情況,在差距太大的時(shí)候,我們的內(nèi)存會猛增,直到OOM。而我們的 Flowable 一定意義上可以解決這樣的問題,但其實(shí)并不能完全解決,這個(gè)后面可能會提到。

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

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

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

  • 其他操作符相關(guān)
    Func1...N 的變化,現(xiàn)在同樣用 ConsumerBiConsumerAction1Action2 進(jìn)行了替換。后面的 Action 都被替換了,只保留了 ActionN。

附錄

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


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

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

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