RxJava中的线程

SchedulerRxJava 的线程调度器,可以指定代码执行的线程。RxJava 内置了几种线程,我们可以直接使用。

Scheduler

  • AndroidSchedulers.mainThread() Android开发中专用的主线程
  • Schedulers.immediate() 当前线程,即默认Scheduler
  • Schedulers.newThread() 启用新线程,并在新线程执行操作
  • Schedulers.io() IO线程,(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。
  • Schedulers.computation() CPU计算用的线程,内部是一个数目固定为CPU核数的线程池,适合于CPU密集型计算,不能操作文件、数据库和网络。该 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中, 否则 I/O 操作的等待时间会浪费 CPU。

一般的网络请求应该使用io,因为io使用了无限的线程池,而newThread没有线程池维护。

Observable

  • Observable.create()…..subscribeOn(Schedulers.io()) // 创建子线程
  • Observable.just()…..subscribeOn(Schedulers.io()) // 未创建子线程
  • Observable.from()…..subscribeOn(Schedulers.io()) // 未创建子线程

耗时操作需要用.create()方式创建Observable。