前言
上一次学习了解了一些RxJava比较常用的操作符,这次来学习一下Rx的多线程操作.
Scheduler-调度器
If you want to introduce multithreading into your cascade of Observable operators, you can do so by instructing those operators (or particular Observables) to operate on particular Schedulers.
如果你想给你的操作符链添加多线程,你可以通知这些操作符(或特定的Observables)运行在指定的调度器上.
也就是说RxJava的多线程是由Schedulers操作的,接下去去了解一下.
调度器种类
RxJava中Schedulers有很多种
下表展示了RxJava中可用的调度器种类(RxAndroid中有多少暂时不知道):
| 调度器类型 | 效果 |
|---|---|
| Schedulers.computation( ) | 用于计算任务,如事件循环或和回调处理,不要用于IO操作(IO操作请使用Schedulers.io());默认线程数等于处理器的数量 |
| Schedulers.from(executor) | 使用指定的Executor作为调度器 |
| Schedulers.immediate( ) | 在当前线程立即开始执行任务 |
| Schedulers.io( ) | 用于IO密集型任务,如异步阻塞IO操作,这个调度器的线程池会根据需要增长;对于普通的计算任务,请使用Schedulers.computation();Schedulers.io( )默认是一个CachedThreadScheduler,很像一个有线程缓存的新线程调度器 |
| Schedulers.newThread( ) | 为每个任务创建一个新线程 |
| Schedulers.trampoline( ) | 当其它排队的任务完成后,在当前线程排队开始执行 |
知道了Schedulser,那么接下去就要运用了.
下面介绍两个操作符,对,是操作符.
SubscribeOn
specify the Scheduler on which an Observable will operate
SubscribeOn 指定了Observable的调度器.
ObserveOn
specify the Scheduler on which an observer will observe this Observable
指定observer将会在哪个Scheduler观察这个Observable.
更具体的说ObserveOn指示一个Observable在一个特定的调度器上调用观察者的onNext, onError和onCompleted方法,
即影响的是subscribe()里的操作.
简单来讲:
使用RxJava,你可以使用subscribeOn()指定观察者代码运行的线程,使用observerOn()指定订阅者运行的线程:
可能还是不太看得懂,
来,show me the code:
–出自这里1
2
3
4myObservableServices.retrieveImage(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(bitmap -> myImageView.setImageBitmap(bitmap));
上述代码表示,在Subscriber前面执行的代码都是在I/O线程中运行。最后,操作view的代码在主线程中运行.
PS:AndroidSchedulers.mainThread()是在Android中才有.
总的来说RxJava操作多线程还是比较简单方便的,而且容易控制.
暂时也就只会这么点,以后学习了再补充.
接下来应该是RxAndroid了,好开心.