Rxjava学习:线程控制 Scheduler

前言

最近有点乱,项目忙着上线,临近这个时候,项目总会出现各种问题,测试出各种bug,有的没得一大堆,尤其是出现memory leak问题,关于memory leak一直想写篇博客谈谈我的想法,这里不多说,咱来接着聊一聊Rxjava的学习。

Rxjava学习:Rxjava的进阶

线程控制 —— Scheduler

线程的控制也是Rxjava种很重要的一块,Rxjava在设计上,针对数据操作的性质作了考虑,由于不同的操作所需要的线程要求不同,这样就需要 Scheduler(调度器)。

默认情况下的Rxjava是不会对线程进行变换的,也就是说,事件发生在哪个线程,最终就会运行在哪个线程。

先来看看Scheduler类 API中提供的线程选择:

  • Schedulers.immediate(): 默认的 Scheduler,在当前线程立即开始执行任务。

  • Schedulers.newThread(): 为每个任务创建一个新线程。

  • Schedulers.io(): 。用于IO密集型任务,如对文件的读写、数据库的操作、网络的访问等,这个调度器的线程池会根据需要增长;对于普通的计算任务,使用Schedulers.computation();Schedulers.io( )默认是一个CachedThreadScheduler,很像一个有线程缓存的新线程调度器。

  • Schedulers.computation(): 计算所使用的 Scheduler。如事件循环或和回调处理,不要用于IO操作(IO操作请使用Schedulers.io());默认线程数等于处理器的数量。

  • 另外, 对于Android 还提供一个专用的 AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。

对于android来说,有了以上几个基本够用了,Rxjava提供了subscribeOn() 和 observeOn() 这两个方法来对线程进行控制。

  • subscribeOn() :用来指定subscribe()方法发生的线程,通常 只需调用一次,位置则随意。
  • observeOn():用来指定其接下来的方法的回调发生的线程。
    举个例子解释一下:
Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.newThread())
    .map(mapOperator) // 新线程,由 observeOn() 指定
    .observeOn(Schedulers.io())
    .map(mapOperator2) // IO 线程,由 observeOn() 指定
    .observeOn(AndroidSchedulers.mainThread) 
    .subscribe(subscriber);  // Android 主线程,由 observeOn() 指定

由 subscribeOn(Schedulers.io()) 指定 subscribe() 最终将发生在 io线程中,而observeOn(AndroidSchedulers.mainThread) 则表示 subscriber 的方法将发生在 主线程 中。 在来看一下,observeOn(Schedulers.newThread()) 在表示下面的方法 map(mapOperator) 中,mapOperator任务将 发生在一个新线程中,mapOperator2 发生在io线程中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近项目里面有用到Rxjava框架,感觉很强大的巨作,所以在网上搜了很多相关文章,发现一片文章很不错,今天把这篇文...
    Scus阅读 11,794评论 2 50
  • 前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard...
    占导zqq阅读 12,997评论 6 151
  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 10,927评论 7 62
  • 来自于:CSDNblog.csdn.net/caihongdao123/article/details/51897...
    于加泽阅读 5,154评论 0 5
  • 那天,我在迷茫中得到一个长者的指引; 那天,我和一个同事相见恨晚; 那天,“幸好我来”闯进我的视野; 那天,恰逢小...
    江畔弯月阅读 1,094评论 0 1

友情链接更多精彩内容