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

时间:2018-01-05 01:22:27

标签: android mvvm android-architecture-components android-architecture-lifecycle

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

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

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

我猜猜当你点击后退按钮时,Facebook没有取消尝试加载你的Feed。

1 个答案:

答案 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事件中取消网络请求操作。