ReactiveX / RxAndroid

RxJava bindings for Android
Apache License 2.0
19.89k stars 2.94k forks source link

Does this library cause memory leaks #426

Closed kuangzhe closed 6 years ago

kuangzhe commented 6 years ago

/*

import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.util.Log; import android.view.View;

import java.util.concurrent.Callable;

import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers;

public class MainActivity extends Activity { private static final String TAG = "RxAndroidSamples";

private final CompositeDisposable disposables = new CompositeDisposable();

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    findViewById(R.id.button_run_scheduler).setOnClickListener(new View.OnClickListener() {
        @Override public void onClick(View v) {
            onRunSchedulerExampleButtonClicked();
        }
    });
}

@Override protected void onDestroy() {
    super.onDestroy();
    disposables.clear();
}

void onRunSchedulerExampleButtonClicked() {
    disposables.add(sampleObservable()
        // Run on a background thread
        .subscribeOn(Schedulers.io())
        // Be notified on the main thread
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableObserver<String>() {
            @Override public void onComplete() {
                Log.d(TAG, "onComplete()");
            }

            @Override public void onError(Throwable e) {
                Log.e(TAG, "onError()", e);
            }

            @Override public void onNext(String string) {
                Log.d(TAG, "onNext(" + string + ")");
            }
        })
    );
}

static Observable<String> sampleObservable() {
    return Observable.defer(new Callable<ObservableSource<? extends String>>() {
      @Override public ObservableSource<? extends String> call() throws Exception {
            // Do some long running operation
            SystemClock.sleep(5000);
            return Observable.just("one", "two", "three", "four", "five");
        }
    });
}

}

打开快速关闭页面会导致内存泄露么 Open the fast close page,Does this library cause memory leaks?

JakeWharton commented 6 years ago

This is not an RxAndroid-specific question. Please ask on the RxJava mailing list for more information about how operators chains retain references and how they can be freed on unsubscribe. The short answer is: basically no.