RxJava——线程控制切换/调度

本篇代码见:RxJava_Demo_Translater

这里开始学习RxJava线程控制(切换/调度)。
一、RxJava线程控制的作用
指定被观察者/观察者的工作线程类型

二、为什么进行RxJava线程控制(切换/调度)?
1、背景:
在RxJava模型中,被观察者/观察者的工作线程=创建自身的线程(即在哪个线程被创建就在哪个线程工作)。
因此,如果被观察者/观察者在主线程中被创建,就会在主线程中工作,也就与一些需求场景产生了冲突。
2、冲突:
对于一般的需求场景,需要在子线程中实现耗时的操作;然后回到主线程实现UI操作。
应用到RxJava模型,可以理解为:
a.被观察者在子线程中生产事件(如实现耗时操作等等)
b.观察者在主线程接收&响应事件(即实现UI操作)
3、解决:
所以为了解决以上冲突,即实现 真正的异步操作,我们需要对RxJava进行 线程控制(切换/调度)。

三、实现方式
采用RxJava内置的线程调度器(Scheduler),即通过功能性操作符subscribeOn()和obseveOn()来实现。

说到线程的切换/控制,就需要了解RxJava中内置的用于调度的线程类型:

类型
含义
应用场景
Schedulers.immediate()
当前线程=不指定线程
默认
AndroidScheduler.mainThread()
Android主线程
操作UI
Scheduler.newThread()
常规新线程
耗时等操作
Scheduler.io()
io操作线程
网络请求、读写文件等io密集型操作
Scheduler.computation()
CPU计算操作线程
大量计算操作
注:RxJava使用线程池来维护这些线程,所以线程调度的效率非常高。

具体操作:
通过订阅(subscribe)连接观察者和被观察者中实现。

//Observable.subscribeOn(Scheduler.Thread):指定被观察者发送事件的线程
//Observable.observeOn(Scheduler.Thread):指定观察者接收&响应事件的线程

//通过订阅连接观察者和被观察者
observable.subscribeOn(Scheduler.newThread())
.observeOn(AndroidScheduler.mainThread())
.subscribe(observer);

你可能感兴趣的:(RxJava——线程控制切换/调度)