Rxlifecycle使用詳解,解決RxJava內存泄露問題


隨着Android第三庫的普及,RxJavaRxAndroid(https://github.com/ReactiveX/RxAndroid)越來越被人熟知,簡潔的語法,配合Java8 Lambda表達式,使代碼的結構更加清晰,通過線程調度器更容易控制和切換線程,種種優點,使用它的人也越來越多。但是使用不好,很容易導致內存泄露。Rxlifecycle (https://github.com/trello/RxLifecycle)就使被用來嚴格控制由於發布了一個訂閱后,由於沒有及時取消,導致Activity/Fragment無法銷毀導致的內存泄露

RxJava和RxAndroid

  1.     compile 'io.reactivex:rxandroid:1.0.1'
  2.     compile 'io.reactivex:rxjava:1.0.16'

Rxlifecycle

  1.     compile 'com.trello:rxlifecycle:0.3.0'
  2.     compile 'com.trello:rxlifecycle-components:0.3.0'

Rxlifecycle 使用

Activity/Fragment需繼承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。

一、bindToLifecycle()方法

在子類使用Observable中的compose操作符,調用,完成Observable發布的事件和當前的組件綁定,實現生命周期同步。從而實現當前組件生命周期結束時,自動取消對Observable訂閱。

  1.         Observable.interval(1, TimeUnit.SECONDS)
  2.         .compose(this.bindToLifecycle())
  3.             .subscribe(new Action1<Long>() { 
  4.                 @Override
  5.                 public void call(Long num) {
  6.                     Log.i(TAG, "  " +num);
  7.                 }
  8.             });

二、bindUntilEvent() 方法

使用ActivityEvent類,其中的CREATE、START、 RESUME、PAUSE、STOP、 DESTROY分別對應生命周期內的方法。使用bindUntilEvent指定在哪個生命周期方法調用時取消訂閱。

  1.     Observable.interval(1, TimeUnit.SECONDS)
  2.          .compose(this.bindUntilEvent(ActivityEvent.PAUSE))  
  3.          .subscribe(mSub);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM