如何學習RxJava3?有這個專案就夠了!

xuexiangjys發表於2022-01-19

前言

最近跳槽到了一家新的公司, 居然發現這家公司的專案大量使用了RxJava3相關的技術, 這讓我這個Rx系列輕度使用者有些無所適從.

俗話說, 千學不如一看, 千看不如一練. 為了能夠快速地熟悉和掌握RxJava3相關的內容, 我參照了官方文件並結合了之前使用的經驗, 寫了一個小的學習專案RxJava3Sample, 裡面包含了文件簡介、例子、日誌展示和原始碼等內容。

就這樣, 我看著文件一遍遍地敲著程式碼學習, 掌握的速度非常的迅速. 有對RxJava3感興趣的不妨把專案下下來, 本地跑一跑試一試, 效果絕對出乎你想象!

好了話不多說, 下面我來簡單介紹一下這個專案.

專案地址

https://github.com/xuexiangjys/RxJava3Sample

演示效果

專案演示

發射器型別

型別描述
Observable<T>能夠發射0或n個資料,並以成功或錯誤事件終止。
Flowable<T>能夠發射0或n個資料,並以成功或錯誤事件終止。支援Backpressure,可以控制資料來源發射的速度。可由Observable轉化而來。
Single<T>只發射單個資料或錯誤事件。只處理 onNext 和 onError 事件,沒有onComplete。
Completable它從來不發射資料,只處理 onComplete 和 onError 事件。可以看成是Rx的Runnable。
Maybe<T>能夠發射0或者1個資料,要麼成功,要麼失敗。類似Single和Completable的結合。如果處理了onNext 和 onError,那麼就不處理onComplete。

Subject

Subject 既是 Observable 又是 Observer(Subscriber)
型別描述
PublishSubject只能接收到訂閱之後的所有資料
BehaviorSubject接收到訂閱前的最後一條資料和訂閱後的所有資料
AsyncSubject只接收到最後一條資料
ReplaySubject接收訂閱前和訂閱後的所有資料
SerializedSubject執行緒安全的Subject,可由其他Subject呼叫toSerialized轉換而來

常用操作符

型別操作符
建立型別createjusttimerintervalfromerror
轉換型別mapflatMapconcatMapswitchMapbuffer
過濾型別filterofTypedebouncethrottleWithTimeoutdistinctdistinctUntilChangedfirstlasttakeskip
結合型別mergezipcombineLatest
錯誤處理型別retryonErrorResumeNext
輔助操作型別delaysubscribeOndototimeout
條件和布林型別ambcontainstakeUntilskipUntil
算術和聚合型別reducemaxminsum

Scheduler

型別描述
Schedulers.io快取執行緒池,執行緒數量無窮大,用於I/O操作
Schedulers.computation固定執行緒池,大小為CPU核數,用於CPU密集型計算(無阻塞)
Schedulers.single單執行緒池
Schedulers.newThread為指定任務啟動一個新的執行緒
Schedulers.trampoline當其它排隊的任務完成後,在當前執行緒排隊開始執行
Schedulers.from使用指定的Executor作為排程器
AndroidSchedulers.mainThreadAndroid的主執行緒,即UI執行緒

Plugins

外掛,又可稱Hook, 可以修改Rxjava的預設行為。

使用RxJavaPlugins可以進行以下三類功能的Hook和自定義:

  • 發射器Observable、Single、Completable和Maybe的生命週期(裝載和被訂閱)。
  • Rxjava的各類執行緒排程器Scheduler。
  • Rxjava全域性未處理的錯誤。

特別感謝

最後

如果你覺得這個專案對你學習RxJava3有所幫助, 你可以點選star進行收藏或者將其分享出去, 讓更多的人瞭解和掌握RxJava3!

我是xuexiangjys,一枚熱愛學習,愛好程式設計,致力於Android架構研究以及開源專案經驗分享的技術up主。獲取更多資訊,歡迎微信搜尋公眾號:【我的Android開源之旅】

相關文章