1

我尝试使用莫斯比。但我有一个问题。

我有活动(视图)、演示者、模型和视图状态。在活动中我有按钮。当我点击按钮时,我从演示者那里调用方法来加载数据:

presenter.loadData()

加载数据的方法调用2个方法:

1.view.showProgress

  1. model.getData()

方法model.getData()创建ASYNC http 请求(改造)。请求完成后,从视图中比演示者调用方法,view.hideProgress().

好的。这个方案运作良好。

但我有一个问题。脚步:

1.点击查看按钮

2.presenter.loadData()

3.在presenter call中view.showProgress()启动异步http请求

4.最小化应用

5.Activity被破坏

6.作为viewState调用方法saveInstanceState()保存当前视图状态的结果(显示进度)

7.5秒后网络请求完成,主持人尝试呼叫view.hideProgress()

8.但是活动不存在,结果什么也没发生。

9.用户返回应用程序

  1. 作为 viewState 中的结果调用方法restoreInstanceState()

  2. 结果进度再次显示,因为此状态保存在 viewState 上(参见第 6 项)。

问题是必须隐藏进度,因为网络请求在应用程序最小化时成功完成(对用户不可见)。

我该如何解决问题?

4

1 回答 1

0

当您收到HTTP响应时,您应该将其存储在某个地方,例如,它可以repository存储在内存中,也可以存储在某个local存储中。然后,当您调用时,model.getData()您应该检查数据是否已保存,如果HTTP没有保存的数据,则从模型返回此数据(如果需要,再发送一个请求以获取更新的数据) - 发送HTTP请求。所以现在,当活动打开你调用时presenter.getData(),它view.showProgress()在内部调用 and model.getData(),模型返回一些缓存数据(如果可用)并presented调用view.hideProgress()

于 2017-12-09T13:53:41.297 回答