使用Google的mvvm架构组件Github browser sample as a reference,如何取消托管的viewmodel,观察实时数据,改进网络请求? :)
也许我读错了,但如果网络状况不佳并且请求需要30秒,则应取消每个请求,否则如果应用程序快速打开和关闭,可能会启动许多请求。精心设计的应用程序如何处理这个问题?
我认为可以访问removeata观察者被删除时的回调by overriding onInactive here。我可以尝试在这里取消所有通话,但如果我因某些原因不想取消某些通话怎么办?
我猜猜当你点击后退按钮时,Facebook没有取消尝试加载你的Feed。
答案 0 :(得分:2)
public class YourViewModel {
private WeakReference<Lifecycle> lifeCycle;
public YourViewModel(LifeCycle liefcycle){
this.lifeCycle = new WeakReference<>(lifecycle);
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
if(this.lifeCycle.get() != null){
// do cancel your network request here
}
}
// your activity
public class YourActivity extends AppCompatActivity {
YourViewModel viewModel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = new YourViewModel(this.getLifeCycle());
}
}
我认为您可以监控主机容器(活动或片段)的生命周期,并在destory notify事件中取消网络请求操作。