RxJava中create源碼

第一次接觸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方法只會執行其中的一個。
下面貼上一張具體執行的過程的流程圖:
這裏寫圖片描述

如果不明白的地方,請留言,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章