標籤:
什麼是 rxJava?
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
簡單來說,rxJava 是一種 基於事件的,使用了可被觀察序列 的非同步 響應 擴充 的類庫。
這句話有這幾個意思:
rxJava 是解決 非同步問題的。
rxJava 是基於事件機制的。
rxJava 是處理響應擴充的,解決 事件的響應問題(比如事件的響應在哪個線程?)。
rxJava 是序列的。它是個有順序的隊列,按順序的,先進後出的。它對集合對象的支援很好。
rxJava 使用了 設計模式裡的 觀察者模式 來實現。
引用類庫
compile ‘io.reactivex:rxjava:1.0.14‘ compile ‘io.reactivex:rxandroid:1.0.1‘
代碼裡如何使用rxJava的代碼長這樣:
Observable.from(userBeans) .map(new Func1<UserBean, String>() { @Override public String call(UserBean userBean) { return String.format("%s(%s)", userBean.name, userBean.age); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<String>() { @Override public void call(String str) { alert(str); } });
這段代碼告訴了我們:
Observable.from () 建立了一個被觀察的對象。
.map() 方法執行了轉換,將對象轉成字串
.subscribeOn() 指示了 在哪個線程裡執行 上面的轉換操作。
.observeOn() 指示了 在哪個線程裡執行 對結果的響應操作,比如後面的 alert 方法。
.subscribe() 傳遞了具體的響應處理,即執行了 alert方法。
代碼很優雅,鏈式的寫法,很清晰的表達了代碼的行為。
從單個對象建立被觀察對象的示範
使用 just() 方法,指定單個對象來建立被觀察對象執行個體。
private void doSomeOne() { Observable.just("Hello, world!").subscribe(new Action1<String>() { @Override public void call(String str) { alert(str); } }); }
從一個集合建立被觀察對象的示範
使用 from() 方法,指定一個集合來建立被觀察對象執行個體。
private void doSomeArray() { Observable.from(new String[]{"A", "B", "C"}).subscribe(new Action1<String>() { @Override public void call(String str) { alert(str); } }); }
對象轉換的示範
我們使用 map() 方法進行轉換。下面的代碼示範了 從 UserBean數組建立被觀察對象,然後使用map()方法轉換成 字串。
private void doSomeEntity() { UserBean[] userBeans = new UserBean[3]; userBeans[0] = new UserBean("jo", 18); userBeans[1] = new UserBean("ken", 9); userBeans[2] = new UserBean("hack", 30); //增加了map方法,轉出 實體到字串 Observable.from(userBeans).map(new Func1<UserBean, String>() { @Override public String call(UserBean userBean) { return String.format("%s(%s)", userBean.name, userBean.age); } }).subscribe(new Action1<String>() { @Override public void call(String str) { alert(str); } }); }
參考:
https://github.com/ReactiveX/RxJava
http://gank.io/post/560e15be2dca930e00da1083
在android 上 使用 rxjava 入門篇