我从事具有干净架构的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);
}
}
所以execute(..)
拿一个 DisposableObserver 然后有一个dispose()
方法被调用来处理这个 observable。
在我的情况下,observable 可能来自 WebApi 使用改造或缓存使用领域。
现在在演示者 onDestroy() 中,我调用了interactor.dispose()
类似的方法:
@Override public void destroy() {
super.destroy();
myInteractor.dispose();
}
从视图中调用它:
@Override public void onDestroy() {
super.onDestroy();
if (getPresenter() != null) {
getPresenter().destroy();
}
}
我完全理解架构,也理解处置非托管网络或数据库资源,但我需要完全理解在这种情况下处置 observable 是否真的很重要,因为我认为 Retrofit 或 Realm 自动管理关闭连接并处置那里的资源。
我认为这与处置领域或改造资源无关,但它可能与取消订阅 observable 本身有关,因为我检查了文档并发现:
DisposableObserver 类:一个抽象的 Observer,通过实现 Disposable 允许异步取消。所有预先实现的 final 方法都是线程安全的。
使用公共 dispose() 方法从 onNext 实现中释放序列。
但我仍然不明白使用它的好处。是否在销毁视图时取消订阅可观察对象,以便它会从发射器onNext()
转到onComplete()
并关闭发射器上的订阅?