RxJava BehaviorSubject和Consumer - 这里有内存泄漏吗?

时间:2018-03-11 09:03:53

标签: android memory-leaks rx-java rx-java2 rx-android

第一次使用RxJava,记得我在RxJava中读了很多关于内存泄漏的内容,所以害怕我可能会在这里创建内存泄漏 - 是吗?如果我是,我该如何解决?我应该在Consumer还是onStop创建onDestroy成员对象并对其执行某些操作? (.subscribe中的lambdra适用于Consumer方法<{1}}

accept

1 个答案:

答案 0 :(得分:2)

是的,通过将返回的Disposable添加到CompositeDisposable,您应该在活动被销毁时处理它,当您有多个要跟踪的流时,这会派上用场:

final CompositeDisposble cd = new CompositeDisposable();

void onCreate() {
    keyboardChangeSubject = BehaviorSubject.create();
    cd.add(
        keyboardChangeSubject
        .debounce(300, TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(AndroidSchedulers.mainThread())
        .subscribe(isKeyBoardOpen -> {
            myButton.setVisibility(isKeyBoardOpen ? View.GONE : View.VISIBLE);
        })
    );
}

@Override
protected void onKeyboardChange(boolean isKeyboardOpen) {
    keyboardChangeSubject.onNext(isKeyboardOpen);
}

@Override
public void onDestroy() {
     cd.clear();
}