RxJava之功能操作符subscribeOn()和observeOn()
1、功能操作符subscribeOn()和observeOn()都与线程切换有关。subscribeOn():它与调用位置无关,放在那里都可以,并且写一个subscribeOn()操作符和写多个的结果是一样的,因为代码只会调用第一个subscribeOn()操作符,第二个第三个等其它的subscribeOn()操作符,代码都不会调用,所以我们一般只需写一个subscribeOn()操作符即可。observeOn():它与调用位置有关,写一个observeOn()和写多个的结果是不一样的,每写一个observeOn()操作符,它下面代码的执行线程就会切换一次。
2、RxJava中的线程调度是在Scheduler的帮助下完成的。接下来的代码例子中有两种类型的线程调度。1、Schedulers.newThread():它会调用RxNewThreadScheduler这种类型的线程。它调用的线程都是新建的。2、Schedulers.io():它会调用RxCachedThreadScheduler这种类型的线程。它调用的线程不是新建的,是线程池中的。
3、使用线程池的好处1、降低资源的消耗:通过重复利用已有的线程,避免多次创建和销毁线程。2、提高系统的性能:省略了创建线程的步骤。
4、接下来讲一下代码例子。代码分为两部分,第一部分为创建观察者,第二部分为操作符的使用。这个代码是还没有使用操作符之前的样子。

6、因为创建观察者的代码基本没有改变,所以就不截图了。现在我们为代码添加上subscribeOn()操作符。

8、现在我们为代码添加上observeOn()操作符。

10、我们为代码加上红色方框中的内容,就可以得到完整的运行结果。

12、我们在添加一个observeOn()操作符,来验证observeOn()操作符可以多次切换线程的能力。

14、我们老揉孟阼写两个map操作符和两个observeOn()操作符,第一个map操作符上面没有observeOn()操作符,第二个map操作符上面有observeOn()操作符。这个例子是验证observeOn()操作符下面的代码会切换线程的能力。observeOn()操作符上面的代码不会切换线程,它下面的代码才会切换线程。

16、可能你会好奇,为什么会有两个" 第一个map "和" 第二个map ",其实这个问题和为什么会有两个onNext方法是一样的。因为我们发送两个事件,如果我们发送一个事件,那么" 第一个map "和" 第二个map "都会变成一个。

18、可能你会好奇经过两个map操作符后,事件最终到底是" 你好 " 还是 " 你好啊啊啊啊啊啊 "。我们可以添加红色方框中的内容来查看。
