關(guān)于RxJava2的一點(diǎn)總結(jié)

我是基于以下依賴做的總結(jié),之前由于依賴的版本太低導(dǎo)致有些包缺失,推薦就用最新的吧

    implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
冷流的基礎(chǔ)用法(不含操作符)

冷流:只有在訂閱的時(shí)候才會發(fā)射數(shù)據(jù)

//普通用法
  Observable.create<Int> {
            it.onNext(0)
            it.onComplete()
        }.subscribe({
                    //onNext
        },{
            //onError
        },{
            //onComplete
        })

//數(shù)據(jù)特別多的時(shí)候,做背壓,場景:IM聊天消息
        Flowable.create<Int>({
            it.onNext(1)
            it.onComplete()
        }, BackpressureStrategy.BUFFER)
            .subscribe({
                //onNext
            },{
                //onError
            },{
                //onComplete
            })

//以下兩種可搭配網(wǎng)絡(luò)請求來使用,視情況而定
        Maybe.create<Int> {
            it.onSuccess(2)
            it.onComplete()
        }.subscribe({ 
             //onSuccess
            //可為null  -->Maybe
        },{
            //onError
        })

        Single.create<Int> {
            //只發(fā)射一次 --> Single  無 onComplete
            it.onSuccess(3)
//            it.onError(IOException(""))

        }.subscribe { t1, t2 ->
            //t1:onSuccess的值  t2:Exception
        }


  //以下兩種可做檢查登錄 應(yīng)該是一致的,第二種可做線程切換,第一種判斷是否切換那里做不了線程切換
        if (true){
            Completable.complete()
        }else{
            Completable.error(IllegalStateException("沒登錄"))
        }.subscribe({
            //直接執(zhí)行目標(biāo)行為
        },{
            //異常,去登錄
        })


        Completable.create {
            val login = false
            if (login){
                it.onComplete()
            }else{
                it.onError(IllegalStateException("沒登錄"))
            }
        }.subscribe({
                    //直接執(zhí)行目標(biāo)行為
        },{
            //異常,去登錄
        })


熱流基礎(chǔ)用法(不含操作符)

這個(gè)用的比較多,場景: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); 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容