线程切换
- subscribeOn
1.影响其调用之前的线程, 包括Observable 的创建操作符中的线程, 以及 其调用之前最近的doOnSubscribe 中的线程。
2.只有第一个subscribeOn 切换线程会起作用。
3.只有在observeOn之前的subscribeOn 会起作用, 即在observeOn调用之后再次调用subscribeOn 是无效的。 - observeOn
1.影响其调用之后的线程
订阅的过程是自下而上的,当里面的Obserable订阅包装后的Observer的时候,主要关注subscribeActual中的方法。
如果是subscribeOn(xxx),那么就会createWorker()创建线程并立刻在线程中执行任务,接下来的所有订阅都将执行在切换后的线程中,因此,第一个subscribeOn之前的变换都将执行在该subscribeOn所指定的线程中。
而对于observeOn(xxx),它也切换了线程,但并不会立刻执行,它会在订阅完成后,自上而下执行的时候再切换线程,所以observeOn(xxx)所影响的是它之后的变换,直到下一个observeOn(xxx),又会切换到新的线程进行变换。