线程调度

RxJava 线程调度

Scheduler

SchedulerRxJava的线程调度器,可以指定代码执行的线程。RxJava 内置了几种线程:

  • AndroidSchedulers.mainThread() 主线程
  • Schedulers.immediate() 当前线程,即默认Scheduler
  • Schedulers.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 回调的执行线程,即事件消费的线程。

Links

下一页