RxJava分析(二)线程调度原理

线程切换

  • 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),又会切换到新的线程进行变换。

参考:
https://www.jianshu.com/p/9e3930fbcb26

你可能感兴趣的:(RxJava分析(二)线程调度原理)