RxJava笔记

来源:互联网 发布:汽车刷ecu软件 编辑:程序博客网 时间:2024/06/03 19:30

1、map与flatmap区别

一方面,两者的返回值类型不同。map的返回类型是一个特定数据类型。flatmap返回的类型是Observable.

另一方面,转成数组时,map返回类型可能是List<String>,那么在observer的onNext方法中就得for循环来读取每个元素的值。如果用flatmap,返回类型是Observable.fromArray(),那么observer的onNext方法会执行多次,从而避免了嵌套for循环。去嵌套化,也是rxjava的设计理念。

2、subscribeOn与observeOn区别

subscribeOn指定了整个过程在哪个线程上执行。如果一个observable从create到subscribe之间,只有一个subscribeOn(Schedulers.io()),那么所有的操作都会同一新线程上执行。如果,没有指定subscribeOn,那么就默认都在主线程上执行。

observeOn指定了,从声明之后,直到再次出现observeOn声明的一段操作在哪个线程上执行。比如,在observable从create到subscribe之间声明了一个observeOn(Schedulers.io()),之后,有做了flatmap操作,那么这个flatmap就会在新线程上执行。再之后,又调了observeOn(AndroidSchedulers.mainThread()),最后,执行一subscribe,那么subscribe的操作就会变成主线程来执行。


所以,subscribeOn,只要声明一次,声明多次,只第一次有效。无论在observeOn之前还是之后,都没影响。

observeOn的优先级高于subscribeOn,且只会改变声明之后的操作所运行的线程。



原创粉丝点击