RxJava—线程调度

Posted by dingqiang.l on August 15, 2018

在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() 每调用一次,线程则会切换一次