我的mvvm,liveata应用程序应该在应用程序背景时取消网络请求吗?

问题描述 投票:1回答:1

使用谷歌的mvvm架构组件Github browser sample as a reference,如何取消托管的视图模型,观察实时数据,改进网络请求? :)

也许我读错了,但如果网络状况不佳并且请求需要30秒,则应该取消每个请求,否则如果应用程序快速打开和关闭,可能会启动许多请求。精心设计的应用程序如何处理这个?

删除了liveata观察者时的回调可以访问by overriding onInactive here我想。我可以尝试在这里取消所有通话,但如果由于某种原因我不想取消某些通话怎么办?

我猜测Facebook在点击后退按钮时不会取消尝试加载您的Feed。

android mvvm android-architecture-components android-architecture-lifecycle
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());
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.