1.前言
Rxjava官方github地址:https://github.com/ReactiveX/RxJava
Rxjava是啥?
官方的解释是这样的:
“a library for composing asynchronous and event-based programs using observable sequences for the Java VM”
意思是:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
说白了Rxjava就是java语言开发中用于异步操作。一开始可看到Rxjava的时候还以为是一个基于java的一种新的语言,从官方的解释也可以看出来。Rx并不是一种新的语言,而是一种普通的Java模式,类似于观察者模式(Observer Pattern),可以将它看作一个普通的Java类库,因此你可以立即使用RxJava。
对Rxjava还不明白的可以参考:
- 给 Android 开发者的 RxJava详解:http://gank.io/post/560e15be2dca930e00da1083
大头鬼的文章,翻译的国外的文章,比较早一点,还算详细。
- 这一系列呼啸而过的文章,比较详细,我很推荐,比较新。 Android RxJava使用介绍(一) Hello
2.Rxjava基本工作流程:
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。在Subscribers接受到事件结果之前我们可以很方便地对结果做出各种处理拦截等等。
RxJava 的观察者模式大致如下图:
对于android开发者来说,只需要在build.gradle文件中加入:
compile 'io.reactivex:rxandroid:1.2.0'
compile 'io.reactivex:rxjava:1.1.5'
3.Hello World
写什么程序都要先来一个hello world,下面就是rxjava的hello world:
private void rxTest(){
/***************************************正常步骤******************************************/
/**消息源,被观察着**/
Observable <String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello world!!");
subscriber.onCompleted();
}
}
);
/**接受处,观察者**/
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Log.d("danxx" ,"onNext--->"+s);
}
};
/**注册观察者**/
myObservable.subscribe(mySubscriber);
/***************************************简化步骤******************************************/
/**Integer类型参数**/
Observable.just(6).subscribe(
new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.d("danxx" ,"Integer--->"+integer);
}
}
);
/**String类型参数**/
Observable.just("String args").subscribe(
new Action1<String>() {
@Override
public void call(String s) {
Log.d("danxx" ,"String--->"+s);
}
}
);
/***************************************map操作******************************************/
/**map感觉就是一个中间加工厂,可以把结果做处理,减少观察者的处理步骤**/
Observable.just("I am ->")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
/**map处理结果**/
return s+"map";
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.d("danxx" ,"map 处理后的结果 String--->"+s);
}
});
}
4.Rxjava操作符
上面我们看到了map操作符,其实Observable的create也是操作符,Rxjava操作符其实就是就java中的方法,只是换了一种称呼。Rxjava的操作符有很多很多,详尽的操作符请看官网的说明,当然是英文版的。Rxjava operators地址:http://reactivex.io/documentation/operators.html
下面是大概列举一下:
- Creating Observables(Observable的创建操作符),比如:Observable.create()、Observable.just()、Observable.from()等等;
- Transforming Observables(Observable的转换操作符),比如:observable.map()、observable.flatMap()、observable.buffer()等等;
- Filtering Observables(Observable的过滤操作符),比如:observable.filter()、observable.sample()、observable.take()等等;
- Combining Observables(Observable的组合操作符),比如:observable.join()、observable.merge()、observable.combineLatest()等等;
- Error Handling Operators(Observable的错误处理操作符),比如:observable.onErrorResumeNext()、observable.retry()等等;
- Observable Utility Operators(Observable的功能性操作符),比如:observable.subscribeOn()、observable.observeOn()、observable.delay()等等;
- Conditional and Boolean Operators(Observable的条件操作符),比如:observable.amb()、observable.contains()、observable.skipUntil()等等;
- Mathematical and Aggregate Operators(Observable数学运算及聚合操作符),比如:observable.count()、observable.reduce()、observable.concat()等等;
- 其他如observable.toList()、observable.connect()、observable.publish()等等;
呼啸而过大神的四篇文章建议你认真读完。