代码之家  ›  专栏  ›  技术社区  ›  K.R.

RxJava行为主体和使用者-这里是否存在内存泄漏?

  •  0
  • K.R.  · 技术社区  · 7 年前

    第一次使用RxJava时,我记得我读了很多关于RxJava内存泄漏的书,所以我担心我可能会在这里造成内存泄漏-是吗?如果我是,我该如何修复它?我应该创建 Consumer 成员对象并对其执行操作 onStop onDestroy ?(lambdra在 .subscribe 是为 消费者 使用 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);
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   akarnokd    7 年前

    是的,当通过添加返回的 Disposable 到a 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();
    }