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