RxJava學習小結之入門篇(一)

在Java的世界裏,接口是Java最強大的設計之一。筆者對接口的認識和理解包括:

實現一個接口需要四個步驟

  • 接口定義:使用interface,可以外部定義,也可以在類中定義,根據實際需求來。
  • 接口調用:接口定義好了,需要調用接口方法
  • 接口實現:接口裏的方法是抽象方法,需要開發人員具體的邏輯實現
  • 接口注入:把接口實現的引用傳給接口調用方。

接口的作用和意義:

  • 通過入參,確定了一種數據流的流動方向,從接口調用方流向接口實現方。也即提供了一種代碼執行的先後順序。
  • 降低代碼的耦合。實現接口是java類與類之間的一種關係,比繼承這樣的強依賴的耦合度低。接口涉及Java六大設計原則裏的依賴倒置原則和接口隔離原則,面向抽象編程,對調用者來說執行相同的行爲(代碼),卻可以組織不同的邏輯。
  • 作爲靜態常量的容器。可以在接口裏定義各種常量。

在Android裏的基本使用

Rxjava每一次observable發出事件,讓訂閱者執行,都是一次使用接口的過程,滿足上述分析的四個步驟。

Observable.create()使用

EditText裏輸入內容,TextView顯示

    (1)Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onStart();
            String s = mainEd.getText().toString().trim();
            subscriber.onNext(s);
            subscriber.onCompleted();
        }
    });

    (2)Subscriber<String> subscriber = new Subscriber<String>() {

        @Override
        public void onStart() {
            super.onStart();
        }

        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(String s) {
            mainTv.setText(s);
        }
    };

    (3)observable.subscribe(subscriber);

分析:

代碼段(1)Observable.create()方法裏,new Observable.OnSubscribe(),完成了subscriber接口的調用。
代碼段(2)使用匿名內部類,完成了接口定義和接口實現。
代碼段(3)完成了接口注入。

因此說,一次Rxjava的操作,就是一次使用接口的過程。明白了這點,如果以後引入Lambda表達式,也就不再容易感到困惑和不解了。

Observable.Just()使用

上述代碼可以簡化寫成下面的樣子

String trim = mainEd.getText().toString().trim();
    Observable.just(trim).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            mainTv2.setText(s);
        }
    });

Just和Create生成Observable的關聯:

  1. just生成的Observable只調用了接口subscriber的onNext()和onComplited()。
  2. just代碼執行是在訂閱subscribe()方法調用之前,通過create生成的observable在訂閱subscribe()方法調用的時候執行

Observable.from()使用

入參可以是集合或者數組,該集合或數組有多少個元素就會發送多少次事件。

StringBuilder sb = new StringBuilder();
    ArrayList<String> list = new ArrayList<>();
    list.add("step1");
    list.add("step2");
    list.add("step3");
    list.add("step4");

Observable.from(list).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            sb.append(s+" ");
        }
    });

mainTv3.setText(sb.toString());

上述代碼返回的結果是:step1 step2 step3 step4

小結

有了上述的認識和練習,相信對Rxjava有了一個入門的學習和使用了。

參考資料

深入淺出RxJava(一:基礎篇)

Github:RxJava

發佈了73 篇原創文章 · 獲贊 75 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章