最近在学 RxAndroid,按照设计,RxAndroid 是可以方便地切换线程,接着更新UI必须在 main 线程,但是我使用 RxAndroid 切换线程的时候,即使不再 main 线程上也可以更新 UI,请问是什么原因?
minSdkVersion 21
targetSdkVersion 25
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
代码如下:
private void rxAndroidThread() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
Log.i(TAG, "subscribe: Thread is " + Thread.currentThread().getName());
e.onNext("Hello ");
e.onNext("World!!!");
e.onComplete();
}
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
Log.i(TAG, "accept: Thread is " + Thread.currentThread().getName());
btn.setText(s);
}
});
}
Log 如下:
07-05 15:59:45.058 23781-23781/exp.rusan.rxandroidsample I/MAIN_ACTIVITY: onCreate: Thread: main
07-05 15:59:45.202 23781-23845/exp.rusan.rxandroidsample I/MAIN_ACTIVITY: subscribe: Thread is RxCachedThreadScheduler-1
07-05 15:59:45.205 23781-23846/exp.rusan.rxandroidsample I/MAIN_ACTIVITY: accept: Thread is RxNewThreadScheduler-1
07-05 15:59:45.205 23781-23846/exp.rusan.rxandroidsample I/MAIN_ACTIVITY: accept: Thread is RxNewThreadScheduler-1
运行图: