RxJava 的线程切换原理

  • Post author:
  • Post category:java

RxJava 的线程切换原理

  1. RxJava通过subscribeOn指定被观察者发生的线程,observeOn指定观察者发生的线程。

  2. 其中Schedulers.IO生成的是IoScheduler。

  3. 通过观察者与被观察者订阅的过程中,首先会触发被观察者的subscribeActual方法,在该方法中,可以看到最终会走scheduler的schedule方法,所以上面提到的IoScheduler实际是调用了它的schedule方法,最终会在NewThreadWorker里面生成ScheduledExecutorService对象,而ScheduledExecutorService实际是由ScheduledThreadPoolExecutor创建的一个核心线程,最大线程个数是Integer.MAX_VALUE的线程池。最终会由ScheduledThreadPoolExecutor的submit或schedule方法执行传过来的Runnable对象,而Runnable执行的是被观察者的subscribe方法。所以解释了被观察者的subscribe方法是在子线程中执行的。

  4. observeOn是观察者发生的线程,AndroidSchedulers.mainThread()实质是HandlerScheduler对象,而在观察者部分,最终观察部分会走Scheduler的scheduleDirect方法,而HandlerScheduler的该方法里面包装了一个ScheduledRunnable对象,通过主线程的handler.postDelayed处理这个runnable对象。


版权声明:本文为m0_56190230原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。