RxJava源碼分析系列:
RxJava系列一:從使用層面分析源碼及執(zhí)行流程
RxJava系列二:根據(jù)操作符分析整個(gè)上下游的執(zhí)行流程
我們先寫一個(gè)最簡單的使用方法,這個(gè)已經(jīng)很白癡了吧
我們可以把這里出現(xiàn)的角色分成三個(gè):第一個(gè)是被觀察者Observable烟央,第二個(gè)是觀察者Observer坑傅,第三個(gè)是我稱之為事件產(chǎn)生場所ObservableOnSubscribe(里面包含事件產(chǎn)生者觅玻,一般被成為發(fā)射器ObservableEmitter)
我們先從第一個(gè)方法說起:
create方法中返回的是一個(gè)被觀察者ObservableCreate垢箕,被觀察者里面包含了一個(gè)事件產(chǎn)生場所站辉,接下來是訂閱的方法 subscribe呢撞,而ObservableCreate是繼承Observable的,這里應(yīng)用了模板設(shè)計(jì)模式饰剥,subscribe方法是Observable中的殊霞,Observable提供了一個(gè)subscribeActual抽象方法,說白了ObservableCreate調(diào)用subscribe方法實(shí)際上就是調(diào)用自己重寫的subscribeActual方法汰蓉。我們查看下這個(gè)方法
這個(gè)方法里面對觀察者進(jìn)行了一層包裹绷蹲,實(shí)際上可以看成對觀察者進(jìn)行了一層代理。這個(gè)代理就是事件發(fā)射器顾孽。在里面主要調(diào)用的是source.subscribe(parent)方法祝钢,source就是這個(gè)所謂的事件產(chǎn)生場所,說白了就是在這個(gè)方法里面進(jìn)行事件的發(fā)射岩齿。而這個(gè)方法也即是我們上面重寫的方法了太颤。我們重寫中是使用observer的代理即發(fā)射器對事件進(jìn)行發(fā)射,查看下發(fā)射器這個(gè)類就明白了
所以在事件產(chǎn)生場所進(jìn)行事件的發(fā)射盹沈,到最后也就是調(diào)用了觀察者對應(yīng)的方法龄章。至此RxJava最簡單的使用的運(yùn)作流程也就分析完畢了
另外需要注意一點(diǎn)的是dispose()方法,這個(gè)方法是用于阻斷事件的接收乞封,查看源碼可以看到onError和onComplete方法中均調(diào)用了一次它做裙,而卻onError和onComplete是互斥的。