MVP:继续异步http请求还是取消?

时间:2017-12-11 15:33:36

标签: android mvp

在我的手机中最小化aplicatoin然后Android销毁活动。 在开发人员选项中,我转为“不要保留活动”。

我尝试实施MVP。

我有按钮的活动。

步骤:

  1. 用户点击按钮
  2. 作为结果来自Presenter的活动调用方法:presenter.dowanloadFile()。这是一个异步http请求。文件大小约为10 MB。
  3. 显示进度
  4. 10秒后用户获得成功http响应
  5. 来自视图的演示者调用方法:view.hideProgress
  6. 行。这个案子工作正常。好的。

    但假设下一个案例:

    1. 用户点击按钮
    2. 作为结果来自Presenter的活动调用方法:presenter.dowanloadFile()。这是一个异步的http请求。
    3. 显示进度
    4. 2秒后用户最小化应用程序
    5. 结果活动被破坏(因为转不要保持活动
    6. 用户返回申请3秒后
    7. 结果创建新活动
    8. 5秒后用户获得成功http响应
    9. 来自视图的演示者调用方法:view.hideProgress
    10. 问题是:

      当用户最小化应用程序(项目 4 )时,是否需要继续 http请求。或者我必须取消当前的http请求。当用户再次返回应用程序时,我必须再次启动新的异步http请求吗?

      我想要下一个:当用户返回应用程序并且http请求成功完成然后显示结果。如果请求未完成,则继续等待http响应。

1 个答案:

答案 0 :(得分:0)

这取决于你想要发生什么?取消昂贵的请求(10秒很多)似乎很浪费,但是你还需要考虑取消"取消"表示在HTTP请求的上下文中。

例如,如果取消请求,则仅阻止传递结果。比意味着您的文件实际上传但您不再获得该请求结果的回调。如果您的上传线程有对您的视图的引用,也要小心,它将被泄露,直到上传完成。

如果您真的不在乎请求,可以取消它。假设您的服务器足够聪明,可以识别同一文件的其他请求,那么如果重新创建activity,则不要复制它。

另一种选择是取消请求。然后你需要一些机制让你的主持人"在[{1}}重新创造中幸存下来。

有很多方法可以做到这一点:

  • 拥有Activity的缓存,如果缓存中存在则不重新创建。
  • 使用无头presenters,它们基本上是具有setRetainInstance(true)的片段,以便在重新创建活动时继续存在。
  • 将您的上传逻辑移至后台fragmentsService,并让您的演示者/视图仅订阅上传过程的状态,但实际上并不拥有它。

当您决定最适合您的应用程序的时候,您可以单独调查每个选项。