Rxjava梳理(1)--Observable,Observer
最近在研究Rxjava,也希望能自己的一些输入梳理出来,帮助自己形成一个体系吧。话说自己第一次认识Rxjava还是参加了一次Thoughtworks组织的一次分享上。当时的第一印象就是Rxjava跟我们一般的写程序的思路确实有些不同,需要花些时间消化。现在就开始梳理自己对Rxjava的理解。
不管学什么东西,第一步先要了解它的概念:“A library for composing asynchronous and event-based programs by using observable sequences.”这句话的意思是Rxjava是一个利用监听者模式构成了异步的并且事件驱动的程序。什么意思呢?先从监听者模式开始说起吧。相信大家对监听者模式并不算陌生吧,当对象A对对象B感兴趣的话,会让对象B注册自己并告诉它:“我对你很感兴趣,请你在XXX状态改变的时候或者是引发XXX事件的时候通知我”。Android中最常见的一个例子就是View.setOnClickListener() 方法,对该视图控件感兴趣的对象会实现OnClickListener这个接口并要求该控件注册自己。这样只要这个空间有了点击事件发生,这个对象用来监听的回调方法就会被调用。
Rxjava则是对观察者模式的一个高度的抽象,它包括两个非常重要的类:Observable(被观察者)和Observer(观察者),而这两个类的对象之间是通过subscribe()方法来建立订阅关系的连接。
先来看看Observer的的代码:
<code>
public interface Observer<T>{
public void onNext(T t);
public void onCompleted();
public void onError(Throwable e);
}
</code>
其中onNext()方法类似onClick()方法用来供观察者处理事件,而onCompleted()方法是被观察者用来告诉观察者:“我传给你的事件已经都传完了,你可以做你的事情了”,onError()方法是被观察者告诉观察者:"我在给你传事件的时候出错了,去看一看吧"。由此可以看出来一个Observer对象对一次订阅只可能调用onCompleted()和onError()方法的其中一个,而不可能两个方法都调用。
下面来看看如果生成Observable对象吧。最原始的一个方法是Observable.create(OnSubscribe<T> onSubscribe),该方法中的参数OnSubscribe是一个接口,该接口的方法如下:
<code>
public void call(Subscriber<? super T> subscriber);
</code>
类Subscriber是Observer的子类,这样就不难猜到观察者里的调用逻辑就是在OnSubscribe里的call方法定义的。通过Observable.create()方法也就衍生出了一系列的更加方便的生成Observable对象的方法。比如Observable.just("1","2","3")方法就相当于在OnSubscribe对象里的call方法是这样实现的:
<code>
subscriber.next("1");
subscriber.next("2");
subscriber.next("3");
subscriber.onCompleted();
</code>
当Observable对象和Observer对象都有了的时候就要靠subscribe()方法把两者连接起来:Observable.subscribe(Subscriber),可见subscribe方法的参数是Subscriber类,在该类中除了含有Observer接口的那几个方法外还有两个方法:
- onStart():它是在subscribe()发生后,事件发生前调用的,用来做一些准备工作
- unsubscribe():它表示取消订阅,也就是说它调用后Subscriber对象不再接收传过来的事件。当然它还有一个更重要的作用就是释放掉Observable的引用,以避免内存泄漏的威胁。
以上就是关于Rxjava中最基本的一些概念的梳理,以后还会继续,现在关于Rxjava的教程文档并不算多,所以我自己也在学习阶段,希望能和更多的朋友进行交流。