RxJava中create源码

来源:互联网 发布:顶级域名的两大类 编辑:程序博客网 时间:2024/06/05 12:50

第一次接触RxJava,就感觉它的链式调用非常好用。以前我们都用AsyncTask,handler来进行异步切换,相当麻烦,经常是既难写也难被读懂,而RxJava,它是一个实现异步操作的库,异步操作很关键的一点是程序的简洁性,而RxJava正是实现了这一点。
以后我会不定期的总结我在学习RxJava中的心得和大家分享,期待你们的光临,
哈哈,废话不多说,今天我们来看下create的具体的实现过程:
首先我们来上一张图:
RxJava的基本的创建过程
上面这个图片就是基本的create的创建过程。

1:首先我们在create中传入了一个Onsubscribe对象,其实这个对象是一个Observable中的内部类,它是一个接口,继承自Action1,而Action1又继承自Action,Action又继承自Function,Function是一个接口。
下面这个图就是一个继承的代码关系。
这里写图片描述

2:当我们调用了create方法之后,我们就把创建的OnSubscribe传进去,进入create方法,我们可以看到,方法里面只是新建了一个Observable对象,如下图:
这里写图片描述

看这个方法,我们看到这个方法里面有个hook.OnCreate(f)的方法,其实这个方法,它返回的对象还是原来的对象f,之后new Observable,再点进去看到,他只是进行了一个赋值操作,把f赋值给了一个OnSubscribe,如下图:
这里写图片描述

3:当赋值完成之后,开始调用subscribe()方法,我们现在来看下subscribe的几个方法
这里写图片描述

里面的参数是Observer,Subscriber,Action1,其实Subscriber是Observer的一个子类,Subscriber implements Observer, Subscription,它只是多了几个方法。我们暂且使用Observer,这里先称之为Observer1,以防与下面的混淆。

当调用subscribe方法的时候,看下图:
这里写图片描述

我们看到,这个方法又new 了一个Subscriber,我们叫它observer2,并且把observer1传了进去,
看下面这个最重要的方法:
这里写图片描述

这个方法传入了observer2和当前的observable对象。
看到这个方法里面有一个onStart方法,这个方法我们可以做一些初始化的工作,在这个方法中,最重要的是onSubscribeStart这一行的代码,观察一下,可以看到,a:我们去调用了create方法创建的onSubscribe对象的call方法,也就是我们自己写的call方法,并且传入了observer2,
b:当执行call方法时,去执行了observer2的onNext方法,
c:observer2的call方法又去执行了onserver1的onNext方法,

至此,create的所有的方法都执行完毕了。

当a步骤执行出错的时候,会调用onError方法,onError和onComplete方法只会执行其中的一个。
下面贴上一张具体执行的过程的流程图:
这里写图片描述

如果不明白的地方,请留言,谢谢

0 0
原创粉丝点击