如何在最小化和恢复应用程序后恢复正确的视图状态?

时间:2017-12-09 13:45:43

标签: android mosby

我尝试使用Mosby。但我有一个问题。

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

presenter.loadData()

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

1。view.showProgress

  1. model.getData()
  2. 方法model.getData()创建 ASYNC http请求(Retrofit)。请求完成后,从视图view.hideProgress()

    中获取演示者调用方法

    行。这个方案很好。

    但我有一个问题。 步骤进行:

    1.点击视图上的按钮

    2。presenter.loadData()

    3.在演示者中调用view.showProgress()并启动异步 http请求

    4.最小化应用程序

    5.活动被破坏

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

    7. 5秒后,网络请求完成,演示者尝试拨打view.hideProgress()

    8.但是活动不存在,因此没有任何反应。

    9.用户返回申请

    1. 结果调用viewState restoreInstanceState()

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

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

      我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

当您收到HTTP响应时,您应该将其存储在某个位置,例如,它可以是repository存储在内存中,或者可能存储在local存储中。然后,当您致电model.getData()时,您应检查数据是否已保存,如果没有保存的数据,则从模型中返回此数据(如果需要,还会发送一个HTTP请求以获取更新的数据) HTTP请求。 现在,当活动打开时,您调用presenter.getData(),它会在view.showProgress()内调用model.getData(),模型会返回一些缓存数据(如果可用)和presented调用view.hideProgress()