柚子快報(bào)邀請(qǐng)碼778899分享:android Rxjava
柚子快報(bào)邀請(qǐng)碼778899分享:android Rxjava
添加依賴
implementation "io.reactivex.rxjava3:rxjava:3.1.5"
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
關(guān)于RxJava
RxJava的核心是異步數(shù)據(jù)流和響應(yīng)式編程
RxJava適用場(chǎng)景
網(wǎng)絡(luò)請(qǐng)求。數(shù)據(jù)庫(kù)讀寫,文件讀寫,定時(shí)任務(wù)等各種耗時(shí)操作都需要通過異步來完成的操作都可以使用RxJava
RxJava幾個(gè)重要概念
觀察者:
Observer,觀察事件變化并處理的主要角色。消費(fèi)者(Consumer)也可以理解成一種特殊的觀察者
被觀察者:
觸發(fā)事件并決定什么時(shí)候發(fā)送事件的主要角色(異常和完成也是一種事件)
Observable. Flowable .Single .Completable Maybe都是被觀察者
Flowable是支持背壓的一種觀察者
Single.Completable.Maye 是簡(jiǎn)化版的Observable
幾種被觀察者通過toObservable/toFlowable/toSingle/toCompletable/toMaybe相互轉(zhuǎn)換
訂閱(subscribe):
觀察者和被觀察者建立關(guān)聯(lián)的操作
強(qiáng)大的操作符群
創(chuàng)建操作符
create() 創(chuàng)建一個(gè)被觀察者
just() 創(chuàng)建一個(gè)被觀察者,并發(fā)送事件,發(fā)送的事件不可以超過10個(gè)以上
Form 操作符
fromArray()
fromCallable()
fromFuture()
fromIterable()
defer() 這個(gè)方法的作用就是直到被觀察者被訂閱后才會(huì)創(chuàng)建被觀察者
timer()當(dāng)?shù)街付ㄊ录缶蜁?huì)發(fā)送一個(gè)OL的值給觀察者
interval() 每隔一段時(shí)間就會(huì)發(fā)送一個(gè)事件,這個(gè)事件是從0開始,不斷增1的數(shù)字
intervalRange() 可以指定發(fā)送事件的開始值和數(shù)量,其他與interval()的功能
range()同時(shí)發(fā)送一定范圍的時(shí)間序列
rangeLong()作用與range()一樣,只是數(shù)據(jù)類型為long
empty()&never()&error()
empty() :直接發(fā)送onConplete事件
never()不發(fā)送任何事件
error()發(fā)送onError()事件
轉(zhuǎn)換操作符
map()map可以將被觀察者發(fā)送的數(shù)據(jù)類型轉(zhuǎn)換成其他的類型
flatMap() 這個(gè)方法可以將時(shí)間序列中的元素進(jìn)行整合加工,返回一個(gè)新的被觀察者
concatMap() concatMap()和flatMap()基本上是一樣的,只不過concatMap()轉(zhuǎn)發(fā)出來的事件是有序的,而flatMap()是無(wú)序的
buffer()從需要發(fā)送的事件當(dāng)中獲取一定數(shù)量的事件,并將這些事件放到緩沖區(qū)當(dāng)中一并發(fā)出
groupBy()將發(fā)送的數(shù)據(jù)進(jìn)行分組,每個(gè)分組都會(huì)返回一個(gè)被觀察者
scan() 將數(shù)據(jù)以一定的邏輯聚合起來
window()發(fā)送指定數(shù)量的事件時(shí),就將這些事件分為一組。window 中的count的參數(shù)就是代表指定的數(shù)量,例如將count指定為2...
組合操作符
concat() 可以將多個(gè)觀察者組合在一,然后按照之前發(fā)送順序發(fā)送事件。需要注意的是,concat()最多只能發(fā)送4個(gè)事件
concatArray() 與concat()作用一樣,不過concatArray()可以發(fā)送多于4個(gè)被觀察者
merge() 這個(gè)方法和concat()作用基本一樣,只是concat()是串行發(fā)送事件,而merge()并行發(fā)送事件
功能操作符
subscribeOn() 指定被觀察者的線程,要注意的是,如果多次調(diào)用此方法,只有第一次有效
observeOn()指定觀察者的線程,沒指定一次就會(huì)生效一次
過濾操作符
filter() 通過一定邏輯來過濾別觀察者發(fā)送的事件,如果返回true,則會(huì)發(fā)送事件,否則不會(huì)發(fā)送
Observable 生產(chǎn)者,用來生產(chǎn)數(shù)據(jù),只會(huì)在訂閱之后才會(huì)生產(chǎn)
Observer 訂閱者,用來接受生產(chǎn)者生產(chǎn)的數(shù)據(jù)
Disposable 訂閱之后的管理者,可以用來中斷生產(chǎn),釋放資源
線程切換:rxjava的重要,用來處理異步任務(wù)
subscribeOn:表示將生產(chǎn)者置于哪個(gè)調(diào)度器(線程)
observeOn:表示將消費(fèi)者置于哪個(gè)調(diào)度器(線程)
數(shù)據(jù)轉(zhuǎn)換:
map
flatMap
filter
柚子快報(bào)邀請(qǐng)碼778899分享:android Rxjava
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。