线程调度
RxJava 线程调度
Scheduler
Scheduler是RxJava的线程调度器,可以指定代码执行的线程。RxJava 内置了几种线程:
AndroidSchedulers.mainThread()主线程Schedulers.immediate()当前线程,即默认SchedulerSchedulers.newThread()启用新线程Schedulers.io()IO 线程,内部是一个数量无上限的线程池,可以进行文件、数据库和网络操作。Schedulers.computation()CPU 计算用的线程,内部是一个数目固定为 CPU 核数的线程池,适合于 CPU 密集型计算,不能操作文件、数据库和网络。
subscribeOn()和observeOn()可以用来控制代码的执行线程。
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.d(TAG, "OnSubscribe.call Thread -> " + Thread.currentThread().getName());
subscriber.onNext("message");
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) //这一句在J2EE中无法执行
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.d(TAG, "Subscriber.onNext Thread -> " + Thread.currentThread().getName());
}
});
根据打印出的 Log 可以得出结论: subscribeOn()指定 OnSubscribe.call()的执行线程,即 Observable 通知 Subscriber 的线程; observeOn()指定 Subscriber 回调的执行线程,即事件消费的线程。