最近mvp+retrofit+RxAnroid的模式开发应用灰常之火,笔者也觉得是时候学习一波了。花了几天的时间学习了一下RxAndroid,RxAndroid是基于Rxjava的拓展,与RxJava相比,除了多了一个线程调度比较常用,与RxJava无异。但是值得一提的是,相对老一点版本的RxAndroid,新版本中少了一些东西,比如生命周期(bindactivity),与ViewObservable等。详情参见这篇文章:
RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准。
Rxjava的好处:异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。
下面开始就讲讲使用:
引入:
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
说白了Rxjava 其实就是一种观察者模式。observable 被观察者,observer、subscriber是观察者。当观察者注册观察的某一行为后,当被观察者发生该行为时就会通知观察者。
观察者的创建方式:
第一种Observer的创建方式:
Observer<Bitmap> observer = new Observer<Bitmap>() {
@Override
public void onNext(Bitmap bitmap) {
}
@Override
public void onCompleted() {
Log.d(tag, "Completed!");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
Log.d(tag, "Error!");
}
};
第二种Subscriber的创建方式:
Subscriber subscriber=new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
}
};
接下来是被观察者的创建方式:
<pre style="background-color:#21282d;color:#e0e2e4;font-family:'Consolas';font-size:13.5pt;">
<span style="color:#e8e2b7;"></span>
Observable<Object> observable =Observable.create(new Observable.OnSubscribe<Object>() { @Override public void call(Subscriber<? super Object> subscriber) { subscriber.onNext("1"); subscriber.onNext("2"); subscriber.onCompleted(); } });
建立订阅关系:
observable.subscribe(observer);
observable.subscribe(subscriber);
这样就观察者与被观察者就建立了关系,分别会调用观察者中的onnext方法,oncompleted在其中执行相应的操作。到此,最最基本的使用就是这样,当然这也是最基本的。Rxjava的强大也远不及此。
除上述的方式进行注册订阅关系外,还有两种更简易的方式。
Observable.from();
Observable.just();
这两种方式会自动进行订阅处理,关于这两者的参数请自行进行查看api,重载比较多,不做详细介绍。
具体请查看测试代码吧,分享个链接:
下一篇,将介绍RxAndroid的操作符。