RxJava BehaviorSubject 和 Consumer - 这里有内存泄漏吗?
RxJava BehaviorSubject and Consumer - is there a memory leak here?
第一次使用 RxJava,记得我读了很多关于 RxJava 内存泄漏的文章,所以担心我可能会在这里造成内存泄漏 - 是吗?如果是,我该如何解决?我应该创建一个 Consumer
成员对象并在 onStop
或 onDestroy
上对其进行处理吗? (.subscribe
中的 lambdra 用于 Consumer
和 accept
方法
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();
}
第一次使用 RxJava,记得我读了很多关于 RxJava 内存泄漏的文章,所以担心我可能会在这里造成内存泄漏 - 是吗?如果是,我该如何解决?我应该创建一个 Consumer
成员对象并在 onStop
或 onDestroy
上对其进行处理吗? (.subscribe
中的 lambdra 用于 Consumer
和 accept
方法
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();
}