为了账号安全,请及时绑定邮箱和手机立即绑定

RxJava之Schedulers

标签:
Android

Schedulers是RxJava的主要组件之一。它们负责在不同线程上执行Observables的操作。它们便于将耗时任务分摊到其他线程。本文将会学习下调度器的类型和使用场景。

IO

最常见的调度器之一。它们用于IO相关操作。比如网络请求和文件操作。IO 调度器背后由线程池支撑。
它首先创建一个工作线程,可以复用于其他操作。当然,当这个工作线程(长时间任务的情况)不能被复用时,会创建一个新的线程来处理其他操作。这个好处也会带来一些问题,因为允许创建的线程是无限的,所以当创建大量线程的时候,会对整体性能造成一些影响。不过IO调度器仍然不失为一个好用的调度器。使用如下:

observable.subscribeOn(Schedulers.io())

Computation

这个调度器和IO调度器非常相似,因其也是由线程池支持的。然鹅,可可用的线程数是固定的,和系统的cpu核数目保持一致。所以如果你的手机是双核的,那么线程池中就有两个线程。这也意味着如果这两条线程都处于忙碌状态,那么该进程将会等待线程变成空闲状态的时候才能处理其他操作。因为这个限制,它不太适合IO相关操作。适用于进行一些计算操作,计算速度还很快。使用如下:

observable.subscribeOn(Schedulers.newThread())

Single

此款调度器非常简单,由一个线程支持。所以无论有多少个observables,都将只运行在这个线程上。也可将其认为是主线程的一个替代,使用如下:

observable.subscribeOn(Schedulers.single())

Immediate

此款调度器在当前活跃线程以阻塞的方式开始其任务(rxjava2已将其移除),无视当前运行的任务。使用如下:

observable.subscribeOn(Schedulers.immediate())

Trampoline

此款调度器运行在当前线程,所以如果你有代码运行在主线程上,它会将将要运行的代码块添加到主线程的队列。和Immediate非常相似,不同的是Immediate会阻塞此线程,而Trampoline会等待当前任务执行完成。适用用于不止一个observables,并且希望他们能够按照顺序执行的场景。

Observable.just(1,2,3,4)
    .subscribeOn(Schedulers.trampoline())
    .subscribe(onNext);
 Observable.just( 5,6, 7,8, 9)
    .subscribeOn(Schedulers.trampoline())
    .subscribe(onNext);
 Output:    Number = 1
    Number = 2
    Number = 3
    Number = 4
    Number = 5
    Number = 6
    Number = 7
    Number = 8
    Number = 9

使用如下:

observable.subscribeOn(Schedulers.trampoline())

Executor Scheduler

更像是一种自定义的IO调度器。我们可以通过制定线程池的大小来创建一个自定义的线程池。适用于observables的数量对于IO调度器太多的场景使用,使用如下:

val executor = Executors.newFixedThreadPool(10) 
val pooledScheduler = Schedulers.from(executor)

Android Scheduler

由rxAndroid库提供,用于将操作切换到主线程以便操作ui,经常用于observeOn方法。使用如下:

AndroidSchedulers.mainThread()



作者:塞上牧羊空许约
链接:https://www.jianshu.com/p/6637724b094f


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消