1、RxJava 如何实现线程切换?
subscribeOn
是通过新建 Observable
的方式,使用 OnSubscribe
类的方式去做到线程切换的。
observeOn
是通过 operator
操作符的形式去完成线程切换的,所以他的作用域和其他操作符一样,是调用 observeOn
之后的链路。
Schedulers.io()
代表 io 操作的线程, 通常用于网络,读写文件等 io 密集型的操作Schedulers.computation()
代表 CPU 计算密集型的操作, 例如需要大量计算的操作Schedulers.newThread()
代表一个常规的新线程AndroidSchedulers.mainThread()
代表 Android 的主线程
生产者线程调度流程概括
Schedulers.io()
等价于new IoScheduler()
。new IoScheduler()
Rxjava 创建了线程池,为后续创建线程做准备,同时创建并运行了一个
清理线程RxCachedWorkerPoolEvictor
,定期执行清理任务。subscribeOn()
返回一个ObservableSubscribeOn
对象,它是Observable
的一个装饰类,
增加了scheduler
。- 调用
subscribe()
方法,在这个方法调用后,subscribeActual()
被调用,才真正执行了
IoSchduler
中的createWorker()
创建线程并运行,最终将上游Observable
的subscribe()
方
法调度到新创建的线程中运行。
消费者线程调度流程概括
AndroidSchedulers.mainThread()
先创建一个包含handler
的Scheduler
, 这个hand