RxJava学习笔记(Schedulers)

Schedulers

Rxjava中的Scheduler相当于线程控制器,Rxjava通过它来指定每一段代码应该运行在什么样的线程。Rxjava提供了5种调度器:

  • .io()
  • .computation()
  • .immediate()
  • .newThread()
  • .trampoline()

另外,Android还有一个专用的AndroidSchedulers.mainThread()指定操作将在Android主线程运行。Rxjava通过subscribeOn()observeOn()两个方法来对线程进行控制,subscribeOn()指定subscribe()时间发生的线程,也就是事件产生的线程,observeOn()指定Subscriber做运行的线程,也就是消费事件的线程。

Schedulers.io()

这个调度器用于I/O操作,比如:读写文件,数据库,网络交互等等。行为模式和newThread()差不多,重点需要注意的是线程池是无限制的,大量的I/O调度操作将创建许多个线程并占用内存。

Observable.create(new Observable.OnSubscribe() {
    @Override
    public void call(Subscriber subscriber) {
        System.out.println("Subscriber CurrentThread = " + Thread.currentThread().getName());
        subscriber.onNext(1);
    }
})
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError");
            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("Observer CurrentThread = " + Thread.currentThread().getName());
                System.out.println("i = " + integer);
            }
        });

打印结果:

I/System.out: Subscriber CurrentThread = RxIoScheduler-2

I/System.out: Observer CurrentThread = main

I/System.out: i = 1

Schedulers.computation()

计算工作默认的调度器,这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。

Schedulers.immediate()

这个调度器允许你立即在当前线程执行你指定的工作。这是默认的Scheduler

Schedulers.newThread()

这个调度器正如它所看起来的那样:它为指定任务启动一个新的线程。

Schedulers.trampoline()

当我们想在当前线程执行一个任务时,并不是立即,我们可以用trampoline() 将它入队。这个调度器将会处理它的队列并且按序运行队列中每一个任务。

你可能感兴趣的:(RxJava学习笔记(Schedulers))