一 前言git
被觀察者也進行了分門別類,鏈式調用、切換線程也進行了源碼查看,可是仍然感受本身的思想不夠rx,即便如今我進行subject的學習,全部的操做符也都過一遍,估計仍然不能讓個人思想變得rx,這和我重學rx的初衷相違背。我必須放慢腳步去思考究竟是哪裏出了問題了。因而我請教了大神,給個人指導缺乏實戰 ,讓我多思考哪些地方能夠經過rx組織 。可是個人思惟中並無這種模式,這就迫使我去改變個人學習思路:去讀別人的源碼,找到這種思惟模式,融入本身。可是不少庫都是利用subject去封裝的。因而這篇準備去闡述subject,以後開始經過rx組織邏輯代碼。github
二 關於Subject 安全
它既是被觀察者,仍是觀察者(這裏主要講解它是被觀察者的一些特性,它是觀察者知道就好)。它是熱流(容易出現錯誤真正關心的事情) 。它作爲被觀察者時候它對外暴露了onNext等方法(只要擁有對象就能夠任意發送流,濫用明顯)。它不是線程安全的(事務的原子性)。關於它的最經常使用的有五個子類:mvvm
關於SerializedSubject對象不能經過create方法去獲取,可是能夠經過前4個對象,而後調用toSerialized
方法能夠轉換成這個對象。佈局
關於更多subject的細節內容,經過查看這篇文章便可,這裏沒有必要再闡述一番。post
三 尋找rx思惟模式學習
咱們拋開代碼思考:就現有的知識,用rx去實現mvvm的過程當中咱們可能遇到什麼問題?google
1.咱們怎麼讓數據只綁定一次控件,而後只改變數據就可更新UI?spa
2.咱們怎麼去監聽數據的變化?.net
答1:把數據綁定UI代碼寫到下流。
答2:經過google的LiveData去監聽數據變化,在數據變化的時候去發射新數據便可。
這樣咱們就能保證只要數據改變,完成全部代碼複用,實現mvvm核心:數據驅動UI。
tips:相比較依賴databinding去實現的mvvm,這簡直是質的飛躍,終於不用在佈局文件中寫僞代碼。
tips:這個mvvm並不必定非要依賴LiveData去實現,咱們徹底能夠拋棄監聽數據改變這一層,暫時不討論。
這裏的難點是怎麼把Livedata封裝到rx中,也就是把LiveData轉換成Rx。
四 讀開源項目
接下來就是要尋找一個合適的開源項目,而後落實到代碼上,當具有抽象成rx的思惟以後,我想mvvm的難點也就不攻自破了。文章截至到這裏,我已經分享了關於mvvm我目前知道的全部的知識。關於更多文章的更新,我想應該在我讀完這個源碼後再去分享一些心得。