GitHut 地址: https://github.com/ReactiveX/RxAndroidhtml
build.gradle:java
1 compile 'io.reactivex:rxandroid:1.2.1' 2 compile 'io.reactivex:rxjava:1.2.2'
(1)RxJava簡介:react
RxJava 是一個在Java虛擬機上實現的響應式擴展庫:提供了基於observable序列實現的異步調用及基於事件編程。android
RxJava最核心的兩個東西是Observables(被觀察者,事件源)和Subscribers(觀察者)。Observables發出一系列事件,Subscribers處理這些事件。ios
它擴展了觀察者模式,支持數據、事件序列並容許你合併序列,無需關心底層的線程處理、同步、線程安全、併發數據結構和非阻塞I/O處理。git
一個Observable能夠發出零個或者多個事件,知道結束或者出錯。每發出一個事件,就會調用它的Subscriber的onNext方法,最後調用Subscriber.onNext()或者Subscriber.onError()結束。github
RxJava是由Netflix開發的反應式擴展(Reactive Extensions)的Java實現。Reactive Extensions是這樣一個第三方庫:它結合了可觀察集合和LINQ式查詢以達到異步和基於事件的編程效果。數據庫
Netflix將這個庫託管到了Github上,支持Java6以上的版本而且使它能夠用於Android App開發。編程
它支持Java5及更高版本,並支持其餘一些基於JVM的語言,如Groovy、Clojure和Scala。安全
咱們假設你已經對RxJava有一些瞭解。若是沒有的話,強烈建議先看看這兩篇 文章和Netflix在Github Wiki上的前幾頁。
(2)觀察者模式
1. Observable和Subscriber能夠作任何事情
Observable能夠是一個數據庫查詢,Subscriber用來顯示查詢結果;Observable能夠是屏幕上的點擊事件,Subscriber用來響應點擊事件;Observable能夠是一個網絡請求,Subscriber用來顯示請求結果。
2. Observable和Subscriber是獨立於中間的變換過程的。
在Observable和Subscriber中間能夠增減任何數量的map。整個系統是高度可組合的,操做數據是一個很簡單的過程。
(3)實現內容
e.g.
Model類中name內容變化時,View(Activity)中Subscribers這個name的變化,同步更新Ui上的Name。
我想到的方式是
在Model中建立Obervable,在setName方法中,寫入nameObservable.onNext(newName)這一行。
(ios開發有ReactiveCocoa這個框架,相似rxjava,能夠監聽成員變量值變化)
ReactiveCocoa是比RxJava更方便一些,RxJava一個比較好的解決這個問題的方法就是爲view model建立一個compose subscription,能夠參考這個項目 https://github.com/tehmou/rx-android-architecture
逐步學習:
(注意對持有的context致使的內存泄露)解決方法,把Subscription加入到隊列中進行管理,當activity關閉時,對Subscription進行清除。
Flipoard 的扔物線了,著名的開源庫 MaterialEditText 做者,仍是著名的 codeKK 上 Dagger 源碼解析做者。