概述
RxJava 就是一个实现异步操作的库。它可以代替我们的 Handler,AsynTask。
简介
RxJava 最核心的两个东西是 Observables(被观察者,事件源)和 Subscribers(观察者)。
Observables 发出一系列事件,Subscribers 处理这些事件。
一个 Observable 可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会 调用它的 Subscriber 的 onNext 方法,最后调用 Subscriber.onNext()或者 Subscriber.onError() 结束。
注意:Rxjava 的看起来很想设计模式中的观察者模式,但是有一点明显不同,那就是如果一 个 Observerble 没有任何的的 Subscriber,那么这个 Observable 是不会发出任何事件的。
HelloWord
首先关联包
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
//定义一个被观察者
Observable<String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
//向观察者发出通知
sub.onNext("Hello, world!");
sub.onCompleted();
}
}
);
这里定义的 Observable 对象仅仅发出一个 Hello World 字符串,然后就结束了。
接着创建一个 Subscriber 来处理 Observable 对象发出的字符串。
//观察者有三个方法 Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println(s); } @Override public void onCompleted() { } @Override public void one rror(Throwable e) { } }; //让观察者和被观察者产生关系 myObservable.subscribe(mySubscriber);
//订阅后myObservable就是调用mySubscriber对象的onNext和onComplete方法, mySubscriber 就会打印出 Hello World!
HelloWord 简化
//RxJava 内置了很多简化创建 Observable 对象的函数,比如 Observable.just 创建只发出一
//个事件就结束的 Observable 对象,可以简化为一行
Observable<String> myObservable = Observable.just("Hello, world!");
// 接下来看看如何简化Subscriber,上面的例子中,我们其实并不关心OnComplete和OnError,
// 只需要在 onNext 的时候做一些处理,这时候就可以使用 Action1 类。
Action1<String> onNextAction = new Action1<String>() { @Override public void call(String s) { System.out.println(s); } };
subscribe 方法有一个重载版本,接受三个 Action1 类型的参数,分别对应 OnNext, OnComplete, one rror 函数。
//现在的 myObservable.subscribe(onNextAction); //可以再整体简化 Observable.just("Hello, world!") .subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } });