Mar*_*ouk 4 android dispose observable rx-java clean-architecture
我正在使用干净的架构开发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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以执行(..)获取DisposableObserver然后有一个dispose()方法被调用来处理这个observable.
在我的例子中,observable可能来自WebApi使用Realm进行改造或缓存.
现在在演示者onDestroy()中,我调用了interactor.dispose(),如:
@Override public void destroy() {
super.destroy();
myInteractor.dispose();
}
Run Code Online (Sandbox Code Playgroud)
从视图中调用之后调用:
@Override public void onDestroy() {
super.onDestroy();
if (getPresenter() != null) {
getPresenter().destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
我完全理解架构,并且我理解处理未管理的网络或数据库资源,但我需要完全理解在这种情况下是否真的重要,因为我认为Retrofit或Realm自动管理关闭连接并处理资源.
我认为这与处置领域或改造资源无关,但它可能与我自己检查文档时可以观察到的取消订阅有关,我发现:
Class DisposableObserver:一个抽象的Observer,允许通过实现Disposable进行异步取消.所有预先实现的最终方法都是线程安全的.
使用public dispose()方法从onNext实现中处理序列.
但我仍然不明白使用它的好处.是否在销毁视图时取消订阅observable,以便从onNext()转到onComplete()并关闭发射器上的订阅?
小智 14
使用dispose方法背后的原因是因为在系统启动视图(活动或片段)之后.订阅开始然后您决定返回或启动另一个视图,而订阅仍然执行但没有完成其工作,这意味着它仍然在内存中将导致内存泄漏.所以你必须调用dispose方法来取消订阅.
| 归档时间: |
|
| 查看次数: |
2411 次 |
| 最近记录: |