RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences. 简单来说,rxJava 是一种 基于事件的,使用了可被观察序列 的异步 响应 扩展 的类库。
特性
rxJava 使用了 设计模式里的 观察者模式 来实现。它的核心理念的两个东西:
rxJava 可以用来改善用户操作体验,它很方便的切换代码运行的线程(UI线程或者工作线程),它与AsyncTask的功能类似,使得我们可以在工作线程共执行耗时的逻辑,完成后再UI线程处理视图状态的编号。 rxjava 能带来代码可读性,让代码清晰。
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
Rxjava的代码很优雅,链式的写法,很清晰的表达了代码的行为。
Observable.from () 创建了一个被观察的对象。 .map() 方法执行了转换,将对象转成字符串 .subscribeOn() 指示了 在哪个线程里执行 上面的转换操作。 .observeOn() 指示了 在哪个线程里执行 对结果的响应操作,比如后面的 alert 方法。 .subscribe() 传递了具体的响应处理,即执行了 alert方法。
示例:
Observable.from(userBeans)
.map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) {
//处理对象的转换
return String.format("%s(%s)", userBean.name, userBean.age);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str); //在UI视图显示
}
});
使用 just() 方法,指定单个对象来创建被观察对象实例。
private void doSomeOne() {
Observable.just("Hello, world!").subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
使用 from() 方法,指定一个集合来创建被观察对象实例。
private void doSomeArray() {
Observable.from(new String[]{"A", "B", "C"}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
我们使用 map() 方法进行转换。下面的代码演示了 从 UserBean数组创建被观察对象,然后使用map()方法转换成 字符串。
private void doSomeEntity() {
UserBean[] userBeans = new UserBean[3];
userBeans[0] = new UserBean("jo", 18);
userBeans[1] = new UserBean("ken", 9);
userBeans[2] = new UserBean("hack", 30);
//增加了map方法,转出 实体到字符串
Observable.from(userBeans).map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) {
return String.format("%s(%s)", userBean.name, userBean.age);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}
Scheduler 用以指定运行在哪个线程下。比如:
.subscribeOn(Schedulers.io()) 指示运行在io线程
.observeOn(AndroidSchedulers.mainThread()) 指示运行在主线程
它指定 subscribe() 发生在 IO 线程. 比如:subscribeOn(Schedulers.io()) 一般来说,我们常用的 处理图片,网络访问,会在这里用这个方法指定为 io 线程运行。
它指定 Subscriber 的回调发生在主线程 .observeOn(AndroidSchedulers.mainThread()) 一般来说,android下都会使用主线程以操作视图
https://github.com/ReactiveX/RxJava http://gank.io/post/560e15be2dca930e00da1083