是否需要处置单个观察者?如果是,在哪里?



我有以下一段代码

Single.just(settings.toString())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<String>() {
private Disposable disposable;
@Override public void onSubscribe(Disposable d) {
this.disposable = d;
}
@Override public void onSuccess(String s) {
webViewFragment.onInjectMessage(s, null);
this.disposable.dispose();
}
@Override public void onError(Throwable e) {
this.disposable.dispose();
}
});

我在后台线程中,需要将字符串注入 WebView,这只能在主线程上完成,这就是我调用.observeOn(AndroidSchedulers.mainThread()

然而,当我在 GitHub 上通读SingleObserver的示例代码时,我看到以下内容:

return new SingleObserver<String>() {
@Override public void onSubscribe(Disposable d) {
Log.d(TAG, " onSubscribe : " + d.isDisposed());
}
@Override public void onSuccess(String value) {
textView.append(" onNext : value : " + value);
textView.append(AppConstant.LINE_SEPARATOR);
Log.d(TAG, " onNext value : " + value);
}
@Override public void onError(Throwable e) {
textView.append(" onError : " + e.getMessage());
textView.append(AppConstant.LINE_SEPARATOR);
Log.d(TAG, " onError : " + e.getMessage());
}
};

他们没有处理SingleObserver.

我是否需要在onSuccess和/或onError中调用this.disposable.dispose();(两者都onSuccess?(,还是此类会自行释放,如 GitHub 示例中所示?

我在内存泄漏的背景下问这个问题。

这个问题源于RxAndroid的"可观察的...订阅"在安卓工作室中突出显示

你不需要在那里处理一次性物品:onSuccessonError

大多数操作员都有自己的观察器。每个观察程序都是在运算符链期间创建和连接的。之后,当您调用subscribe()时,将在顶级数据源运算符(例如Single.just()(中创建一次性,并通过每个运算符的ChildObserver.onSubscribe()回调连接到订阅者。然后,从数据源开始,选中Disposable.isDisposed(),并调用ChildObserver.onSuccessful()onError()回调。

无论如何,一次性是控制流的接口,不会静态保存资源。如果您自己的逻辑在后台工作,并且结果应用于主线程上的视图,则当活动的生命周期经过onDestroy()时,View 组件可能无效。因此,出于这个原因,通常在那里打电话给dispose()

相关内容

最新更新