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