1. 概念

Rx是微软.NET的一个响应式扩展。Rx借助可观测的序列提供一种简单的方式来创建异步的,基于事件驱动的程序。
Rx就是一种响应式编程,来创建基于事件的异步程序
RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
RxJava就是一个实现异步操作的库。
Android 创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。
RxJava 的优势:简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

2. 观察者模式
举例:Button.setOnClickListener(new OnClickListener())
button —— 被观察者
OnClickListener —— 观察者
两者通过setOnClickListener达成订阅(Subscribe)关系
(ContentProvider与ContentObserver之间也存在这样的关系)

RxJava的观察者模式呢,跟这个差不多,但是也有几点差别:
(1) Observer与Observable是通过 subscribe() 来达成订阅关系。
(2) RxJava中事件回调有三种:onNext() 、 onCompleted() 、 onError() 。
(3) 如果一个Observerble没有任何的Observer,那么这个Observable是不会发出任何事件的。

RxJava的精髓,Scheduler相当于线程控制器,可以通过它来指定每一段代码运行的线程。

3. 线程控制 —— Scheduler

RxJava 已经内置了几个 Scheduler ,它们已经适合大多数的使用场景:

Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。是默认的 Scheduler。

Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。

Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内 部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。

Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。

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

参考文章:

给 Android开发者的 RxJava 详解

http://gank.io/post/560e15be2dca930e00da1083

大话RxJava

http://www.jianshu.com/p/856297523728

最新文章

  1. typeof操作符在javascript中运用时时页面上的操作数显示
  2. bzoj 3907: 网格 组合数学
  3. Python3 列表
  4. Week13(12月5日):不怕错误,慢慢来 :)
  5. python学习之第三课时--基本数据类型及区别,变量
  6. 关于vue-axios的url地址统一设置
  7. 解决vi上下左右变ABCD问题
  8. Jenkins-client模式配置
  9. Idea突然不停indexing的问题
  10. 【开源】 bsf.mvc spingboot的扩展
  11. 【洛谷P4462】异或序列
  12. react+mobx 编写 Async装饰器
  13. Datatable的操作方法
  14. 《CSAPP》符号解析
  15. [读书笔记]Linux命令行与shell编程读书笔记04 安装软件,编辑器注意事项
  16. eclipse快键
  17. Panorama——H5实现全景图片原理
  18. 解析oui.txt文件,通过MAC前缀获取Organization
  19. poj3349(hash table)
  20. 时间操作(struct tm、time_t)求指定日期 前n天的日期

热门文章

  1. Postman + Newman 生成测试报告
  2. 孩子王app自动签到送现金券
  3. 查询SQL Server数据库所有表字段备注
  4. K近邻实现
  5. Mac017--Jenkins 持续集成
  6. 前端表格选中列合计,select-chosen,set集合,display隐藏
  7. 【转载】如何编写ROS的第一个程序hello_world
  8. Mybatis中SqlSessionFactory和SqlSession学习和原理
  9. Leetcode Lect4 二叉树中的分治法与遍历法
  10. go中string类型转换为基本数据类型的方法