在Android大环境下,耗时操作在工作线程中执行,UI操作的主线程中执行,使用RxJava的线程调度,可以轻松切换线程。
1、被观察者(事件源,数据发送事件…),由于可能会进行网络访问、IO读写等较耗时的操作,因此改操作应在工作线程中执行。 2、观察者(事件接受处,响应事件),此处操作是响应被观察者的操作,并不耗时,所以在UI线程中执行。
/**
* 线程切换
*/
private void scheduler() {
Observable
.create((ObservableOnSubscribe<String>) emitter -> {
Log.i(TAG, "发送数据所在的线程: " + Thread.currentThread().getName());
emitter.onNext("线程调度");
emitter.onComplete();
})
.subscribeOn(Schedulers.io())//在io线程产生事件,发送数据
.observeOn(Schedulers.io())//切换到io线程接收、响应
.subscribeOn(AndroidSchedulers.mainThread())//第二次指定无效
.observeOn(AndroidSchedulers.mainThread())//在UI线程中接收、响应事件
.subscribe(s -> Log.i(TAG, "接收数据所在的线程: " + Thread.currentThread().getName()));
}
注: subscribeOn() 在第一次调用时有效,之后不管如何切换都无效 observeOn() 每调用一次,线程则会切换一次