Scheduler 是 RxJava 的线程调度器,可以指定代码执行的线程。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。