RxJava运用Scheduler完成多线程操作

  • RxJava运用Scheduler完成多线程操作

Scheduler-调度器 (为了方便理解可以简单的认为rx中的调度器即为线程

应用Rxjava中如果想在操作符链上添加多线程,你可以指定这些操作符(或特定的Observables)运行在指定的调度器上.也就是说RxJava的多线程是由Schedulers操作的

RxJava中Schedulers有很多种
下表展示了RxJava中常用的几种调度器:

调度器类型效果
Schedulers.io( )用于IO密集型任务,如异步阻塞IO操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。这个调度器的线程池会根据需要增长;对于普通的计算任务,请使用Schedulers.computation();Schedulers.io( )默认是一个CachedThreadScheduler,很像一个有线程缓存的新线程调度器
Schedulers.computation( )用于计算任务,使用的固定的线程池,大小为 CPU 核数。 这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算,事件循环或和回调处理。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。
Schedulers.from(executor)使用指定的Executor作为调度器
Schedulers.immediate( )在当前线程立即开始执行任务,相当于不指定线程。这是默认的 Scheduler
Schedulers.trampoline( )当其它排队的任务完成后,在当前线程排队开始执行
AndroidSchedulers.mainThread()Android专用的,指定的操作将在 Android 主线程运行
Schedulers.newThread()总是启用新线程,并在新线程执行操作。

知道了Schedulser,那么接下去就要运用了.
下面介绍两个操作符,对,是操作符.

SubscribeOn -> SubscribeOn 指定了Observable的调度器.

ObserveOn -> 指定observer将会在哪个Scheduler观察这个Observable.

更具体的说ObserveOn指示一个Observable在一个特定的调度器上调用观察者的onNext, onError和onCompleted方法,即影响的是subscribe()里的操作.

简单来讲:
使用RxJava,你可以使用subscribeOn()指定被观察者代码运行的线程,使用observerOn()指定订阅者运行的线程:

代码实例:

myObservableServices.retrieveImage(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(bitmap -> myImageView.setImageBitmap(bitmap));

上述代码表示,在Subscriber前面执行的代码都是在I/O线程中运行。最后,操作view的代码在Android中的UI主线程中运行.

PS:AndroidSchedulers.mainThread()是在Android中才有.而且涉及到更新UI的操作必须用此线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值