在使用一个库前,首先得知道它是什么,那么,首先,RxJava是什么?
答案是:一个基于观察者模式的异步响应式库。
首先来看一段基本的使用代码
Observable<String> observable=Observable.just("hello","world");
Subscriber<String> subscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
}
};
observable.subscribe(subscriber);
代码的作用很简单,就是在屏幕上顺序显示出两个Toast,一个hello,一个word。
咦,等等,类似的代码我好像在哪见过
View.OnClickListener onClickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"hello ,world",Toast.LENGTH_SHORT).show();
}
}
mButton.setOnClickListener(onClickListener);
对,没错,就是它了,相似度99%,button的点击事件也是基于观察者模式的,这也就是rxjava的第一个特点,观察者模式,只不过与Button不同的是,button是面向用户的,用户与界面交互的时候触发,而rxjava是面向数据的,数据流入的时候触发。
rxjava的流程就是这样的
Observable -> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
也就是说,observable是事件的生产者,subscriber是事件最终的消费者。
那么接下来解释下rxjava的各个类。
首先Observable,被观察者,事件的生产者,初始化函数与just,from,create等等,在这里传入起始数据,经过一系列的处理,最终流向subscriber。
前面说了,数据经过一系列的处理,然后交给subscriber,那么怎么处理呢,再来看一段改进的代码
Observable<String> observable=Observable.just("hello","a","world");
observable.filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) {
return s.length()>3;
}
}).subscribe(subscriber);
这里Toast的输出依然是”hello”,“world”,怎么没有“a”?,这就是filter的作用,它把长度小于3的字符串给过滤掉了,当然这只是Operator 众多数据操作中的一个,它可以对你的数据进行特定的处理,然后继续向下传递,其他的以后再说。
最后是订阅者,也是数据的处理者,subscriber,其中又有几个基本方法
onStart()在订阅时调用,可以进行一些初始化操作,比如显示一个progressbar
onCompleted()订阅完成时调用,可以在这里隐藏progressbar
onNext()数据处理函数,你可以在这里对获得的数据进行处理,比如显示到listview上等等
onError()捕获异常时的操作,每一个 Obervable的执行最后一定会调用onCompleted()和onError()方法中的一个,所以不需要在Operator 中进行数据处理。
可以看到,rxjava对数据的处理就类似于实际生活中的流水线过程,一个初始数据,经过一系列的处理,最后交给了订阅者来处理。这样的函数式编程,能让代码更好的解耦,同时也能让结构更加清晰,利于开发和维护。当然,rxjava的优点还不止这些,它最大的特点就是异步,鉴于这只是1.0,那我们就先只是了解下它是什么和怎么用吧,详情请看下回分解。