Android效能最佳化之利用Rxlifecycle解決RxJava記憶體流失__Java

來源:互聯網
上載者:User

Android效能最佳化之利用Rxlifecycle解決RxJava記憶體流失
前言:
其實RxJava引起的記憶體流失是我無意中發現了,本來是想瞭解Retrofit與RxJava相結合中是如何通過適配器模式解決的,結果卻發現了RxJava是會引起記憶體流失的,所有想著尋找一下資料學習一下如何解決RxJava引起的記憶體流失,就查到了利用Rxlifecycle開源架構可以解決,今天周末就來學習一下如何使用Rxlifecycle。

引用泄漏的背景:
RxJava作為一種響應式編程架構,是目前編程界網紅,可謂是家喻戶曉,其簡潔的編碼風格、易用易讀的鏈式方法調用、強大的非同步支援等使得RxJava被廣泛使用,它通過線程調度器更容易控制和切換線程,如果該背景工作執行緒還沒執行結束就退出Activity或者Fragment,就會Activity或者Fragment無法釋放引起記憶體流失。

什麼是Rxlifecycle。
rxlifecycle是trello開發的用於解決RxJava引起的記憶體流失的開源架構。

github地址:https://github.com/trello/RxLifecycle

如何使用Rxlifecycle。
1.)在build.gradle檔案中添加引用
compile ‘com.trello.rxlifecycle2:rxlifecycle:2.2.1’

// If you want to bind to Android-specific lifecycles
compile ‘com.trello.rxlifecycle2:rxlifecycle-android:2.2.1’

// If you want pre-written Activities and Fragments you can subclass as providers
compile ‘com.trello.rxlifecycle2:rxlifecycle-components:2.2.1’

// If you want pre-written support preference Fragments you can subclass as providers
compile ‘com.trello.rxlifecycle2:rxlifecycle-components-preference:2.2.1’

// If you want to use Navi for providers
compile ‘com.trello.rxlifecycle2:rxlifecycle-navi:2.2.1’

// If you want to use Android Lifecycle for providers
compile ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle:2.2.1’

// If you want to use Kotlin syntax
compile ‘com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.1’

// If you want to use Kotlin syntax with Android Lifecycle
compile ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.2.1’
2.)根據不同的需要Activity繼承RxActivity ,Fragment繼承RxFragment

public class MainActivity7 extends RxActivity {
private TextView mTextView;

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mTextView = (TextView) findViewById(R.id.text);    //類比記憶體泄露    testRxJava();    finish();}private void testRxJava() {    Observable.create(new Observable.OnSubscribe<String>() {        @Override        public void call(Subscriber<? super String> subscriber) {            int i = 0;            while (i < 1000000000) {                i++;            }            subscriber.onNext(String.valueOf(i));            subscriber.onCompleted();        }    }).compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))            .subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Action1<String>() {                @Override                public void call(String s) {                    mTextView.setText(s);                }            });}@Overrideprotected void onDestroy() {    super.onDestroy();    LApplication.getRefWatcher().watch(this);}

}

目前支援的Activity/Fragment 結構圖

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

Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.