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。