我是基于以下依賴做的總結(jié),之前由于依賴的版本太低導(dǎo)致有些包缺失峦阁,推薦就用最新的吧
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
冷流的基礎(chǔ)用法(不含操作符)
冷流:只有在訂閱的時(shí)候才會(huì)發(fā)射數(shù)據(jù)
//普通用法
Observable.create<Int> {
it.onNext(0)
it.onComplete()
}.subscribe({
//onNext
},{
//onError
},{
//onComplete
})
//數(shù)據(jù)特別多的時(shí)候琉用,做背壓茂洒,場(chǎng)景:IM聊天消息
Flowable.create<Int>({
it.onNext(1)
it.onComplete()
}, BackpressureStrategy.BUFFER)
.subscribe({
//onNext
},{
//onError
},{
//onComplete
})
//以下兩種可搭配網(wǎng)絡(luò)請(qǐng)求來(lái)使用意敛,視情況而定
Maybe.create<Int> {
it.onSuccess(2)
it.onComplete()
}.subscribe({
//onSuccess
//可為null -->Maybe
},{
//onError
})
Single.create<Int> {
//只發(fā)射一次 --> Single 無(wú) onComplete
it.onSuccess(3)
// it.onError(IOException(""))
}.subscribe { t1, t2 ->
//t1:onSuccess的值 t2:Exception
}
//以下兩種可做檢查登錄 應(yīng)該是一致的十电,第二種可做線程切換赛糟,第一種判斷是否切換那里做不了線程切換
if (true){
Completable.complete()
}else{
Completable.error(IllegalStateException("沒(méi)登錄"))
}.subscribe({
//直接執(zhí)行目標(biāo)行為
},{
//異常淤刃,去登錄
})
Completable.create {
val login = false
if (login){
it.onComplete()
}else{
it.onError(IllegalStateException("沒(méi)登錄"))
}
}.subscribe({
//直接執(zhí)行目標(biāo)行為
},{
//異常,去登錄
})
熱流基礎(chǔ)用法(不含操作符)
這個(gè)用的比較多,場(chǎng)景:MVVM里作為ViewModel和View之間通信锯岖,類似于LiveData
// observer will receive all 4 events (including "default").
BehaviorSubject<Object> subject = BehaviorSubject.createDefault("default");
subject.subscribe(observer);
subject.onNext("one");
subject.onNext("two");
subject.onNext("three");
// observer will receive the "one", "two" and "three" events, but not "zero"
BehaviorSubject<Object> subject = BehaviorSubject.create();
subject.onNext("zero");
subject.onNext("one");
subject.subscribe(observer);
subject.onNext("two");
subject.onNext("three");
// observer will receive only onComplete
BehaviorSubject<Object> subject = BehaviorSubject.create();
subject.onNext("zero");
subject.onNext("one");
subject.onComplete();
subject.subscribe(observer);
// observer will receive only onError
BehaviorSubject<Object> subject = BehaviorSubject.create();
subject.onNext("zero");
subject.onNext("one");
subject.onError(new RuntimeException("error"));
subject.subscribe(observer);