iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

簡述

rxJava 是一個開源涵式庫,用於有關資料的線程轉換,非常強大,相當有技術深度的好用工具,學的好可以大大優化自己的程式碼。

觀察者模式

分為觀察者與被觀察者,當被觀察者發出新資料時,Observer就會接收資料到並做出對應的操作。

  • 觀察者(Observer)
    透過subscribe 與 Observable連接後,當Observable發送資訊時,Observer將會觀察到資訊,進入到對應的Function。
  • 被觀察者(Observable)
    負責發送資訊,透過subscribe 與 Observer連接,可以將資訊發給Observer,使其完成對應的操作。

Gradle

 //rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
// Android main thread
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

範例

just發送

//Observable發送資料,並與Observer訂閱
Observable.just(1,2,3).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d("Just", "與Observable訂閱時: ");
            }
​
            @Override
            public void onNext(@NonNull Integer integer) {
                Log.d("Just", "接收到值為: "+integer);
            }
​
            @Override
            public void onError(@NonNull Throwable e) {
                Log.d("Just", "接收值時發生錯誤時: "+e.getMessage());
            }
​
            @Override
            public void onComplete() {
                Log.d("Just", "Observer發送完值時");
            }
        });

create創建Observable

  1. 創建Observable
private Observable getCreateObservable(){
        return Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
                //對觀察者onNext()發出訊息
                emitter.onNext("Hello");
                emitter.onNext("World!!");
                //對觀察者發出onComplete(),表示完成
                emitter.onComplete();
            }
        });
    }
  1. 創建Observer
getCreateObservable().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        Log.e("Create", "與Observable訂閱時: ");
                    }
​
                    @Override
                    public void onNext(@NonNull String s) {
                        Log.e("Create", "onNext: "+s );
                    }
​
                    @Override
                    public void onError(@NonNull Throwable e) {
                        Log.e("Create", "接收值時發生錯誤時: "+e.getMessage());
                    }
​
                    @Override
                    public void onComplete() {
                        Log.e("Create", "Observable發送完值時");
                    }
                });


這裡我新增了observeOn()subscribeOn(),分別代表:

  • subscribeOn:訂閱時位於的線程,可以看成當發送訊息位於的線程。
    常用線程包括:
    • Schedulers.io():執行非 CPU 密集型操作,例如進行網路調用、讀取文件和磁碟區、DataBase操作等。
    • Schedulers.computation():可用於執行 CPU 密集型操作,如處理大量數據。
    • Schedulers.newThread():每次都會建立新的 Thread,不建議使用,耗效能。
  • observeOn:觀察結果的線程,可以看成接收訊息位於的線程。
    常用線程包括:
    • AndroidSchedulers.mainThread():指我們的接收值(onNext)在main thread 下。
      以上是rxJava的基本操作,下一篇將接續講解,讓rxjava的知識更完整喔~

上一篇
精華筆記 Day20 -- okhttp
下一篇
精華筆記 Day22 - RxJava(2)
系列文
android studio 30天 精華筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言