前言
最近跳槽到了一家新的公司, 居然發現這家公司的專案大量使用了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轉換而來 |
常用操作符
型別 | 操作符 |
---|---|
建立型別 | create 、just 、timer 、interval 、from 、error |
轉換型別 | map 、flatMap 、concatMap 、switchMap 、buffer |
過濾型別 | filter 、ofType 、debounce 、throttleWithTimeout 、distinct 、distinctUntilChanged 、first 、last 、take 、skip |
結合型別 | merge 、zip 、combineLatest |
錯誤處理型別 | retry 、onErrorResumeNext |
輔助操作型別 | delay 、subscribeOn 、do 、to 、timeout |
條件和布林型別 | amb 、contains 、takeUntil 、skipUntil |
算術和聚合型別 | reduce 、max 、min 、sum |
Scheduler
型別 | 描述 |
---|---|
Schedulers.io | 快取執行緒池,執行緒數量無窮大,用於I/O操作 |
Schedulers.computation | 固定執行緒池,大小為CPU核數,用於CPU密集型計算(無阻塞) |
Schedulers.single | 單執行緒池 |
Schedulers.newThread | 為指定任務啟動一個新的執行緒 |
Schedulers.trampoline | 當其它排隊的任務完成後,在當前執行緒排隊開始執行 |
Schedulers.from | 使用指定的Executor作為排程器 |
AndroidSchedulers.mainThread | Android的主執行緒,即UI執行緒 |
Plugins
外掛,又可稱Hook, 可以修改Rxjava的預設行為。
使用RxJavaPlugins可以進行以下三類功能的Hook和自定義:
- 發射器Observable、Single、Completable和Maybe的生命週期(裝載和被訂閱)。
- Rxjava的各類執行緒排程器Scheduler。
- Rxjava全域性未處理的錯誤。
特別感謝
最後
如果你覺得這個專案對你學習RxJava3有所幫助, 你可以點選star進行收藏或者將其分享出去, 讓更多的人瞭解和掌握RxJava3!
我是xuexiangjys,一枚熱愛學習,愛好程式設計,致力於Android架構研究以及開源專案經驗分享的技術up主。獲取更多資訊,歡迎微信搜尋公眾號:【我的Android開源之旅】