当前位置: 首页 > 知识库问答 >
问题:

为什么在这种情况下处理DisposableObserver很重要

单于钊
2023-03-14

我用干净的架构在android项目上工作。

我有以下课程:

public abstract class RxBaseInteractor<T, Params> {

  private final CompositeDisposable disposables;

  public RxBaseInteractor() {
    this.disposables = new CompositeDisposable();
  }

  abstract public Observable<T> buildUseCaseObservable(Params params);

  public void execute(DisposableObserver<T> observer, Params params) {
    Preconditions.checkNotNull(observer);
    final Observable<T> observable = this.buildUseCaseObservable(params)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());
    addDisposable(observable.subscribeWith(observer));
  }

  public void dispose() {
    if (!disposables.isDisposed()) {
      disposables.dispose();
    }
  }

  protected void addDisposable(Disposable disposable) {
    Preconditions.checkNotNull(disposable);
    Preconditions.checkNotNull(disposables);
    disposables.add(disposable);
  }
}
 @Override public void destroy() {
        super.destroy();
        myInteractor.dispose();
    }
    @Override public void onDestroy() {
    super.onDestroy();
    if (getPresenter() != null) {
      getPresenter().destroy();
    }
  }

使用public dispose()方法从onNext实现中释放序列。

但我还是不明白使用它的好处。是否用于在销毁视图时从observable取消订阅,以便从onNext()转到onComplete()并关闭发射器上的订阅?

共有1个答案

马煌
2023-03-14

使用dispose方法背后的原因是,在系统启动视图(activityfragment)后,订阅启动,然后您决定返回或启动另一个视图,而旧的订阅仍在执行且未完成其工作。这意味着它仍在内存中,这将导致内存泄漏。因此必须调用Disposite方法进行取消订阅。

 类似资料:
  • 假设我有这个语法,用Antlr4编写: 我的思维过程是应该与相同;应该是。如果 上面的树似乎是正确的,它再次计算为。 但是当不使用空格时,antlr认为有两个INT-expr。如果 不应该跳过所有空格(使用规则),这意味着两个表达式的解析方式应该相同吗?

  • 根据Java教程 将包装类型(整数)的对象转换为其相应的基元(int)值称为取消装箱。当包装类的对象为: 作为参数传递给需要相应基元类型的值的方法 分配给相应基元类型的变量 为什么在这种情况下会发生拆箱? 在这种情况下,这些事情发生在哪里?是否有管理数组中元素访问的底层方法?或者[]暗示某种变量?

  • 问题内容: 我编写了以下代码来实现Singleton模式: 当我编译此文件时,它应该生成Test.class和Test $ TestHolder.class,但它还会生成Test $ 1.class。这没有道理。那么,为什么以及如何呢? 问题答案: 类需要在中调用私有构造函数。但是它是私有的,实际上不能从另一个类中调用。因此,编译器发挥了作用。它 添加了一个仅知道的新的非私有构造函数!_该构造函数

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display:

  • 我的SSE代码和标准的C代码一样慢,我做错了什么? 我在Intel i3-6100 CPU上运行,使用C和minGW和CLion,我使用-O0标志。 在使用clock()函数测量性能时,两个版本的速度一样快,都达到了大约45节拍(超过1000节拍)(SSE:1138节拍-C:1093节拍)。我认为SSE不知何故打乱了时钟()的时间测量,但即使只是简单地计算秒,也没有什么不同。 函数 :(交换注释.

  • 问题内容: 来自问题的原因,或者说更确切地说,object .__new__在这两种情况下的工作方式不同 作者对为什么不感兴趣,而对如何感兴趣。 我非常想了解原因,尤其是: 为什么不打印任何参数而不是 为什么没有为testclass3引发错误?(因为除了自我之外没有其他参数) 码 问题答案: 您正在使用旧的Python版本;此错误消息已更新: Python只会抱怨既不支持又不被覆盖的参数。例如,当