RxJava可以说现在是相当的火。前段时间面试也被经常问到,由于以前项目中没用到过,所以一直只是听说这个东西,只是大概了解了一下,所以这方面问题回答的不是很好。那RxJava到底是什么呢?
官方解释:RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
翻译:一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
上面的解释你可能一脸懵逼,但是没关系,我们接下来一起来学习下。
Github地址:
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
引入依赖:
compile ‘io.reactivex:rxjava:1.0.14’
compile ‘io.reactivex:rxandroid:1.0.1’
RxJava 到底是什么
RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准。
然而,对于初学者来说,这太难看懂了。因为它是一个『总结』,而初学者更需要一个『引言』。
其实, RxJava 的本质可以压缩为异步这一个词。说到根上,它就是一个实现异步操作的库,而别的定语都是基于这之上的。
RxJava用法
在介绍RxJava使用方法之前,先说明下几个概念,最核心的应该就是观察者和被观察者了。
- 观察者:
Observer
- 被观察者:
Observable
- 订阅:
subscribe
(1) hello,world
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted...");
}
@Override
public void onError(Throwable throwable) {
Log.e(TAG, "onError: " + throwable.getMessage());
}
@Override
public void onNext(String s) {
Log.e(TAG, "onNext: s = " + s);
}
};
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello");
subscriber.onNext("world");
subscriber.onCompleted();
}
}).subscribe(observer);
logcat如下:
06-08 09:56:51.768 27699-27699/com.example.boguang.demo E/RxAndroidActivity: onNext: s = hello
06-08 09:56:51.768 27699-27699/com.example.boguang.demo E/RxAndroidActivity: onNext: s = world
06-08 09:56:51.768 27699-27699/com.example.boguang.demo E/RxAndroidActivity: onCompleted...
Observable不可以直接实例化,因为构造方法是protected的
protected Observable(OnSubscribe<T> f) {
this.onSubscribe = f;
}
(2) from方法创建Observable
String[] datas = new String[]{"wms1993","love","ranran","1314"};
Observable.from(datas).subscribe(observer);
对应logcat:
06-08 09:38:30.985 26929-26929/com.example.boguang.demo E/RxAndroidActivity: onNext: s = wms1993
06-08 09:38:30.985 26929-26929/com.example.boguang.demo E/RxAndroidActivity: onNext: s = love
06-08 09:38:30.985 26929-26929/com.example.boguang.demo E/RxAndroidActivity: onNext: s = ranran
06-08 09:38:30.985 26929-26929/com.example.boguang.demo E/RxAndroidActivity: onNext: s = 1314
06-08 09:38:30.985 26929-26929/com.example.boguang.demo E/RxAndroidActivity: onCompleted...
当你有一个数组对象的时候,通过from方法创建Observable应该是最简单的,调用from之后然后subscribe一下,这样RxJava就可以使用了。