国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

RxJava使用小結

2019-11-06 10:02:08
字體:
來源:轉載
供稿:網友

1.Rxjava的定義

         RxJava是基于觀察者模式實現的。

         RxJava 在 GitHub 主頁上的自我介紹是 "a library for composing asynchronous and event-based PRograms using observable sequences for theJavaVM"(一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程序的庫)。RxJava本質上是實現異步操作的庫。

2.使用RxJava的優勢

        異步操作很關鍵的一點是程序的簡潔性,因為在調度過程比較復雜的情況下,異步代碼經常會既難寫也難被讀懂。 Android 創造的 AsyncTaskHandler ,其實都是為了讓異步代碼更加簡潔。RxJava 的優勢也是簡潔,但它的簡潔的與眾不同之處在于,隨著程序邏輯變得越來越復雜,它依然能夠保持簡潔。

3.如何去使用(初步認識)

      在開始之前,先學習一下RxJava的主要屬性和方法:

      Observable:(可觀察者,即被觀察者),在需要時發出事件

      Observer:(觀察者),觀察者處理事件

      Subscribe:(訂閱)事件,Observable 和 Observer 通過 subscribe() 方法實現訂閱關系,從而 Observable 可以在需要的時候發出事件來通知 Observer

      subscribeOn(AndroidSchedulers.io()):事件發生在io線程,即Observable.onSubscribe被激活時所處的線程(事件產生線程)

      observeOn(AndroidSchedulers.mainThread()):事件處理在子線程中,(事件消費線程)

      RxJava采用『后臺線程取數據,主線程顯示』的程序策略

3.1 引入依賴

    compile 'io.reactivex:rxandroid:1.1.0'    compile 'io.reactivex:rxjava:1.1.0'

3.2 創建被觀察者

Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {

                //可在此方法中執行耗時操作,請求網絡等

                subscriber.onNext("努力");                subscriber.onNext("拼搏");                subscriber.onNext("樂觀");                subscriber.onNext("負責");                subscriber.onNext("擔當");            }        });

3.3 指定產生事件和消費事件的線程(產生事件在子線程,消費事件在主線程策略)

observable.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread());

3.4 創建觀察者

/** * 在 subscribe 剛開始,而事件還未發送之前被調用,可以用于做一些準備工作, * 例如數據的清零或重置。這是一個可選方法,默認情況下它的實現為空 * 不可指定線程,在Subscriber所發生的線程中調用 * 要在指定的線程來做準備工作,可以使用 doOnSubscribe() 方法*/

Subscriber<String> subscriber = new Subscriber<String>() {            @Override            public void onCompleted() { //事件完成時調用執行            }            @Override            public void onError(Throwable e) { //事件出錯時調用執行            }            @Override            public void onNext(String s) {                Log.e("schedulerSubscriber", "onNext: " + s ); //事件消費時調用執行            }        };

3.5 訂閱事件

observable.subscribe(subscriber);

4.使用總結

4.1 事件產生的3中方法:

       第一種:Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext(" ");                             ....

            }        });

       第二種:Observable.just( , , , );

       第三種:Observable.from( );(括號中是數組)

4.2 Action0和Action1的認識

       Observable.subscribe(new Action1( Object obj){

                                   .....

      });

     Action0 是 RxJava 的一個接口,它只有一個方法 call(),這個方法是無參無返回值的

     Action1 也是一個接口,它同樣只有一個方法 call(T param),這個方法也無返回值,但有一個參數

5. 使用RxJava注意的問題

       Observable持有Context時會導致內存泄漏(創建Subscription時,會以某種方式持有了Context的引用,如果沒有及時的結束,內存占用會越來越大)

       解決方法:在生命周期的某個時刻及時的取消訂閱(使用CompositeSubscription來持有所有的subscriptions,然后在onDestory()或onDestoryView()里取消所有的訂閱)

       持有:compositeSubscription.add(subscription);

       取消:compositeSubscription.unsubscribe();


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 濮阳县| 杭锦后旗| 霍城县| 枝江市| 西贡区| 谢通门县| 前郭尔| 桂阳县| 泰宁县| 两当县| 乌鲁木齐县| 阿荣旗| 通江县| 万山特区| 东丽区| 柳林县| 石楼县| 威远县| 乐陵市| 枣强县| 汕头市| 沾化县| 和硕县| 汨罗市| 镇宁| 大丰市| 凭祥市| 额尔古纳市| 东丽区| 兴海县| 北川| 开鲁县| 腾冲县| 沅江市| 密山市| 卢湾区| 吉木萨尔县| 绥滨县| 海晏县| 抚顺市| 南汇区|