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

RxJava BehaviorSubject and Consumer - is there a memory leak here?

第一次使用 RxJava,记得我读了很多关于 RxJava 内存泄漏的文章,所以担心我可能会在这里造成内存泄漏 - 是吗?如果是,我该如何解决?我应该创建一个 Consumer 成员对象并在 onStoponDestroy 上对其进行处理吗? (.subscribe 中的 lambdra 用于 Consumeraccept 方法

void onCreate() {
    keyboardChangeSubject = BehaviorSubject.create();
    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);
}

是的,当 Activity 被销毁时,您应该通过将返回的 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();
}