我尝试在onComplete()块上调用它,但带有改进网络调用的compositeDisposables.clear()会导致调用在中途被取消。
observable.......
.subscribe(
{
utilModule.logI("net repo response")
//cleanDisposables()//this causes HttpOk cancelled error
},
{
utilModule.logI("no repo response" + it.message)
//cleanDisposables()
}
))
}
private fun cleanDisposables() {
//clean old network observables, dispose will prevent further observing
utilModule.logI("disposing observables")
if (!compositeDisposables.isDisposed) {
compositeDisposables.clear()
}
}
答案 0 :(得分:3)
通常,您的一次性用品将与您的活动或片段生命周期相关联,并在onDestroy中清除。
这可能是使用MVP设计模式的一个例子......
presenter.kt
fun dispose() {
compositeDisposable.clear()
}
activity.kt
override fun onDestroy() {
super.onDestroy()
presenter.dispose()
}
答案 1 :(得分:1)
以下是我在MVVM中的操作方法。我有LifeCycle-ed Activity,它包含在我的ViewModel中。然后在ViewModel类中我有CompositeDisposable
的实例。我在ViewModel clear
方法中onCleared
。{/ p>
这是一个存根
public class MyViewModel extends AndroidViewModel {
private MyRepo mRepo;
private CompositeDisposable mDisposables = new CompositeDisposable();
public MyViewModel(@NonNull Application application) {
super(application);
mRepo = MysRepo.getInstance(...);
}
public void loadData()
{
Disposable d = mRepo.getMyPeculiarData()
...
.subscribe(...);
mDisposables.add(d);
}
@Override
protected void onCleared() {
super.onCleared();
mDisposables.clear();
}
}