RxJava subscribeOn()和observeOn()的区别

By | 2018年8月25日
  subscribeOn observeOn
意义 告诉发射源运行在哪个Thread。 拦截,从当前点切换Thread。
添加个数 1个,最好在source后添加,可以添加多个,但只有最靠近source的起作用。 多个,每添加一个,就会在当前处切换Thread,直到有另一个observeOn。
有效性 对于某些source,例如interval(),不起作用。不过可以加第三个参数,设置它的scheduler:
Observable.interval(1000, TimeUnit.MILLISECONDS, Schedulers.io())。
始终有效。
缓存 无缓存,source行为没改变,还是一个一个发射。 在当前处设置缓存,数据过来后,就缓存,等待后面的operator执行。

总结

在开发UI程序时,我经常使用subscribeOn()把耗时计算切换到非UI线程,计算完后再使用observeOn()切换到UI线程刷新UI。