爲了知足你們的飢渴難耐,GitHub將同步更新代碼,主要包含基本的代碼封裝,RxJava 2.x全部操做符應用場景介紹和實際應用場景,後期除了RxJava可能還會增添其餘東西,總之,GitHub上的Demo專爲你們傾心打造。傳送門:https://github.com/nanchen2251/RxJava2Exampleshtml
RxJava 對你們而言確定不陌生,其受歡迎程度不言而喻。而在去年的早些時候,官方便宣佈,將在一段時間後再也不對 RxJava 1.x 進行維護,而在倉庫中另闢蹊徑,開始對 RxJava 2.x 進行推廣起來,我本來是不想寫這麼一套教程的,由於 RxJava 受歡迎度這麼高,並且這2.x也出來了這麼久,我堅信網上必定有不少超級大牛早已爲你們避雷。然而很難過的是,我搜索了些時間,能搜出來的基本都是對 RxJava 1.x 的講解,或者是 Blog 標題就沒說清楚是不是2.x系列(對於咱們這種標題黨來講很難受)。這不,我就來拋磚引玉了。java
我們先不提別的,先爲你們帶點可能你早已熟知的乾貨——來自扔物線大神的給Android開發者的RxJava詳解。react
該文詳細地爲你們講解了 RxJava 的優點、原理以及使用方式和適用情景,必定被衆多的Android開發者視爲神器。惋惜,文章歷史比較久遠,基本都是講解的RxJava 1.x了。git
那關注的小夥伴必定會問,那我沒用過 RxJava 1.x ,還有必要先學習 1.x 的內容嗎?github
我的以爲沒必要要,由於RxJava 2.x 是按照Reactive-Streams specification規範徹底的重寫的,徹底獨立於RxJava 1.x 而存在,它改變了以往RxJava的用法。異步
額,因爲我的能力水平有限,因此對於英文基礎好的,你們能夠去官網查閱相關API介紹,而對於英文不那麼流暢的童鞋,我也爲你們準備了乾貨:RxJava2Examples (正在更新)。post
其實,我標題爲入門教程,按理說應該從簡單入門開始講的,原諒我忽然偏題了,由於我以爲可能大多數人都瞭解或者使用過RxJava 1.x(由於它真的太棒了)。雖然可能熟悉1.x 的你能夠直接扒文檔就能夠了,但這麼大的變化,請原諒我還在這裏瞎比比。學習
這是一個很大的變化,熟悉RxJava 1.x的童鞋必定都知道,1.x 是容許咱們在發射事件的時候傳入 null 值的,但如今咱們的 2.x 不支持了,不信你試試? 大大的 NullPointerException 教你作人。這意味着 Observable<Void> 再也不發射任何值,而是正常結束或者拋出空指針。spa
在 RxJava 1.x 中關於介紹 backpressure 部分有一個小小的遺憾,那就是沒有用一個單獨的類,而是使用 Observable 。而在 2.x 中 Observable 不支持背壓了,將用一個全新的 Flowable 來支持背壓。線程
或許對於背壓,有些小夥伴們還不是特別理解,這裏簡單說一下。大概就是指在異步場景中,被觀察者發送事件的速度遠快於觀察者的處理速度的狀況下,一種告訴上游的被觀察者下降發送速度的策略。感興趣的小夥伴能夠模擬這種狀況,在差距太大的時候,咱們的內存會猛增,直到OOM。而咱們的 Flowable 必定意義上能夠解決這樣的問題,但其實並不能徹底解決,這個後面可能會提到。
其實這三者都差很少,Single 顧名思義,只能發送一個事件,和 Observable 接受可變參數徹底不一樣。而Completable 側重於觀察結果,而Maybe 是上面兩種的結合體。也就是說,當你只想要某個事件的結果(true or false)的時候,你可使用這種觀察者模式。
這一塊基本沒什麼改動,但細心的小夥伴必定會發現,RxJava 2.x 中已經沒有了Schedulers.immediate() 這個線程環境,還有Schedulers.test()。
熟悉 1.x 的小夥伴必定都知道,咱們在1.x 中是有Func1,Func2.....FuncN的,但2.x 中將它們移除,而採用Function 替換了Func1,採用BiFunction 替換了Func 2..N。而且,它們都增長了throws Exception,也就是說,媽媽不再用擔憂咱們作某些操做還須要try-catch了。
如Func1...N 的變化,如今一樣用Consumer和BiConsumer對Action1 和Action2進行了替換。後面的Action都被替換了,只保留了ActionN。
下面從官方截圖展現 2.x 相對 1.x 的改動細節,僅供參考。