很久很久以前,就看了各种介绍RxJava的文章,网上最出名的也看过了,但还是处于一知半解状态,最近再看,决定实践Talk is cheap,show me code。以代码说话,这样也会更容易理解。
首先还是介绍一下主角RxJava吧,百度百科的说法:RxJava是用于使用Java VM的可观察序列编写异步和基于事件的程序的库。别问我这句话怎么理解,或是什么意思,我也说不清楚。套用网上著名文章(给Android 开发者的 RxJava 详解)里的说法:RxJava的本质可以压缩为异步这一个词,说到根上,它就是一个实现异步操作的库。
RxJava核心思想就是观察者模式,对于观察者模式,也是研究了好几次,先给出解释:
观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)
是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,
并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。
此种模式通常被用来实现事件处理系统。
根据特定场景来理解这些名词是最通俗的办法 ,观察者模式涉及两种身份,观察者和被观察者,你可以想象,你自己(码神、码农、码畜、程序猿、程序媛)就是观察者,产品需求说明书是被观察者。你是需要根据开发需求说明书来干活的,这关系到身家性命,所以你要观察它。但是 ,说明书是产品部门给出的,你不能知道他们什么时候会出来。放心,产品部门有新的功能会迫不及待告诉你的。这时候,被观察者有更新,就会发送通知给观察者。大概就是这么个意思。
代码解释一切:
开始开发前,工具还是要齐全的:添加依赖
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
第一步:创建被观察者
Observable productDoc = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("需求文档版本1.0");
e.onNext("需求文档版本2.0");
e.onNext("需求文档版本3.0");
e.onComplete();
}
});
第二步:创建观察者
Observer<String> programmer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG,"onSubscribe");
}
@Override
public void onNext(String value) {
Log.e(TAG,"onNext:"+value);
}
@Override
public void onError(Throwable e) {
Log.e(TAG,"onError="+e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG,"onComplete()");
}
};
第三步:建立订阅关系
productDoc.subscribe(programmer);
至于第三步为什么是产品需求文档订阅了程序员,这个似乎是RxJava内部实现被迫如此,有了解的读者可以评论,我也涨涨见识。
运行结果如下:
至此,这个超级简单的RxJava调用完成了。
注:文章肯定有很多写的不好的地方,可能在理解上还会出现错误或偏差,只是想将这种思想记录下来,供大家理解,欢迎评论!