【知識整理】這可能是最好的RxJava 2.x 入門教程(一)


 一、前言

這可能是最好的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所有操作符應用場景介紹和實際應用場景,后期除了RxJava可能還會增添其他東西,總之,GitHub上的Demo專為大家傾心打造。傳送門:https://github.com/nanchen2251/RxJava2Examples

 

 

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

      咱們先不提別的,先為大家帶點可能你早已熟知的干貨——來自扔物線大神的給Android開發者的RxJava詳解

      該文詳細地為大家講解了 RxJava 的優勢、原理以及使用方式和適用情景,一定被眾多的Android開發者視為神器。可惜,文章歷史比較久遠,基本都是講解的RxJava 1.x了。

      那關注的小伙伴一定會問,那我沒用過 RxJava 1.x ,還有必要先學習 1.x 的內容嗎?

      個人覺得不必要,因為RxJava 2.x 是按照Reactive-Streams specification規范完全的重寫的,完全獨立於RxJava 1.x 而存在,它改變了以往RxJava的用法。

      額,由於個人能力水平有限,所以對於英文基礎好的,大家可以去官網查閱相關API介紹,而對於英文不那么流暢的童鞋,我也為大家准備了干貨:RxJava2Examples (正在更新)。

二、與RxJava 1.x的差異

     其實,我標題為入門教程,按理說應該從簡單入門開始講的,原諒我突然偏題了,因為我覺得可能大多數人都了解或者使用過RxJava 1.x(因為它真的太棒了)。雖然可能熟悉1.x 的你可以直接扒文檔就可以了,但這么大的變化,請原諒我還在這里瞎比比。

1、Nulls

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

2、Flowable

     在 RxJava 1.x 中關於介紹 backpressure 部分有一個小小的遺憾,那就是沒有用一個單獨的類,而是使用 Observable 。而在 2.x 中 Observable 不支持背壓了,將用一個全新的 Flowable 來支持背壓。

    

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

3、Single/Completable/Maybe

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

4、線程調度相關

 

       這一塊基本沒什么改動,但細心的小伙伴一定會發現,RxJava 2.x 中已經沒有了Schedulers.immediate() 這個線程環境,還有Schedulers.test()。

5、Function相關

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

6、其他操作符相關

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

    

三、附錄

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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM