各位看官們大家好,上一回中咱們說(shuō)的例子是"RxJava中的多線程操作",本章回中介紹的例子是"R xJava中的線程切換"。閑話休提,言歸正轉(zhuǎn),讓我們一起Talk Android吧!
概念介紹
我們?cè)谏弦徽禄刂薪榻B了如何創(chuàng)建多線程,本章回將介紹如何進(jìn)行線程切換。線程切換是指在主線程和子線程之間進(jìn)行切換,因?yàn)锳ndroid只能在主線程中更新UI,所以通過(guò)線程切換來(lái)更新UI。切換切換也可以通過(guò)Andoird的Handler機(jī)制實(shí)現(xiàn),我們之前介紹過(guò),這里就不展開(kāi)討論了。
使用方法
線程切換也是使用subscribeOn
或者observeOn
操作符,切換線程時(shí)使用不同的參數(shù):
- 切換到子線程時(shí)使用的參數(shù)為Schedulers.newThread()
- 切換到主線程時(shí)使用的參數(shù)為AndroidSchedulers.mainThread()。
示例代碼
Log.d(TAG, "rxJavaEx: "+Thread.currentThread());
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@io.reactivex.rxjava3.annotations.NonNull ObservableEmitter<String> emitter) throws Throwable {
Log.d(TAG, "subscribe: "+Thread.currentThread());
emitter.onNext("Event 1");
emitter.onNext("Event 2");
emitter.onComplete();
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Throwable {
Log.d(TAG, " Observer accept: "+s+" "+Thread.currentThread());
}
});
注意:上面程序中使用的AndroidSchedulers
類(lèi)來(lái)自rxjava包,而不是rxandroid包,在文件頭import包時(shí)需要區(qū)分這兩種包,否則使用rxAndroid包中的類(lèi)時(shí)程序會(huì)報(bào)編譯錯(cuò)誤。我的項(xiàng)目在gradle中導(dǎo)入了rxAndroid依賴(lài),因此會(huì)有rxJava和rxAndroid兩種類(lèi)型的包,大家的項(xiàng)目可能不會(huì)有這種情況。
上面的代碼中我們先是把被觀察者切換到了子線程運(yùn)行,然后把觀察者切換到主線程運(yùn)行。編譯并且運(yùn)行該程序,通過(guò)結(jié)果來(lái)檢驗(yàn)是否可以在子線程和主線程之間切換。
: rxJavaEx: Thread[main,5,main]
: subscribe: Thread[RxNewThreadScheduler-1,5,main]
: Observer accept: Event 1 Thread[main,5,main]
: Observer accept: Event 2 Thread[main,5,main]
從程序的運(yùn)行結(jié)果中可以看到所有的程序運(yùn)行在主線程main中,被觀察者運(yùn)行在子線程RxNewThreadScheduler-1
中,觀察者運(yùn)行在主線程main中。該結(jié)果與我們剛才分析的程序邏輯完全一致,表明上面的程序可以實(shí)現(xiàn)線程切換功能。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-405216.html
看官們,關(guān)于"RxJava中的線程切換"的例子咱們就介紹到這里,欲知后面還有什么例子,且聽(tīng)下回分解!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405216.html
到了這里,關(guān)于一起Talk Android吧(第五百三十八回:RxJava中的線程切換)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!