2

使用 Google 的 mvvm 架构组件Github 浏览器示例作为参考,如何取消托管视图模型、观察实时数据、改造网络请求?:)

也许我读错了,但是如果网络条件很差并且请求需要例如 30 秒,则应该取消每个请求,否则如果应用程序快速打开和关闭,可能会启动许多请求。一个设计良好的应用程序将如何处理这个问题?

我认为可以通过在此处覆盖 onInactive来访问删除 livedata 观察者时的回调。我可以尝试在此处取消所有通话,但是如果我出于某种原因不想取消某些通话怎么办?

我猜当您点击返回按钮时,Facebook 不会取消尝试加载您的提要。

4

1 回答 1

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());
    }
}

我认为您可以监控主机容器(活动或片段)的生命周期,并在销毁通知事件中取消网络请求操作。

于 2018-01-05T03:01:42.393 回答