重學rx(三)


一 前言git

      被觀察者也進行了分門別類,鏈式調用、切換線程也進行了源碼查看,可是仍然感受本身的思想不夠rx,即便如今我進行subject的學習,全部的操做符也都過一遍,估計仍然不能讓個人思想變得rx,這和我重學rx的初衷相違背。我必須放慢腳步去思考究竟是哪裏出了問題了。因而我請教了大神,給個人指導缺乏實戰 ,讓我多思考哪些地方能夠經過rx組織 。可是個人思惟中並無這種模式,這就迫使我去改變個人學習思路:去讀別人的源碼,找到這種思惟模式,融入本身。可是不少庫都是利用subject去封裝的。因而這篇準備去闡述subject,以後開始經過rx組織邏輯代碼github

二 關於Subject 安全

       它既是被觀察者,仍是觀察者(這裏主要講解它是被觀察者的一些特性,它是觀察者知道就好)。它是熱流(容易出現錯誤真正關心的事情) 。它作爲被觀察者時候它對外暴露了onNext等方法(只要擁有對象就能夠任意發送流,濫用明顯)。它不是線程安全的(事務的原子性)。關於它的最經常使用的有五個子類:mvvm

  • ReplaySubject (釋放接收到的全部數據)
  • BehaviorSubject (釋放訂閱前最後一個數據和訂閱後接收到的全部數據)
  • PublishSubject (釋放訂閱後接收到的數據)
  • AsyncSubject (僅釋放接收到的最後一個數據)
  • SerializedSubject(串行Subject)
  • 關於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我目前知道的全部的知識。關於更多文章的更新,我想應該在我讀完這個源碼後再去分享一些心得。

    相關文章
    相關標籤/搜索