在android 上 使用 rxjava 入門篇


什么是 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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: