Android - onDestroy之后的API请求回调

时间:2017-05-25 20:27:07

标签: android callback android-volley android-lifecycle ondestroy

我希望我能解释清楚......

我试图更好地了解如何在Android中处理HTTP回调,因此我创建了一个使用Volley进行HTTP请求的简单应用程序。它只有一个触发HTTP服务请求的按钮,基本上只是更新数据库中的数字,并在5秒后通过JSON响应发送它。 Activity获取响应并在TextView中显示响应。我正在一个真正的设备上测试它,这个设备已经使得不能保持活动"设置中的选项 - 开发者选项。

这是我正在测试的场景:

  1. 启动App。
  2. 点击触发HTTP请求的按钮。
  3. 点击按钮后,点击设备的主页按钮,将应用程序发送到后台。调用onDestroy方法是因为"不要保持活动"选项。
  4. 等待几秒钟以获得HTTP响应。我可以看到设备获取它,因为它在logcat监视器中打印并且数据库已更新。
  5. 在运行回调之前,我会检查活动是否仍然存在。由于活动已被销毁,因此将忽略回调。如果应用程序从后台恢复,则不会发生崩溃,但会丢失网络响应。此外,如果我再次点击该按钮,它会发送一个新的HTTP请求并再次增加该号码......
  6. 所以,问题是:

    1. 哪些是向UI提供网络响应的最佳做法?我的意思是,如果不是一个简单的操作,让我们说这是一个注册表格,我接到一个电话或强迫我将应用程序发送到后台的东西,任何事情都可能发生,我怎么能确保不会想念网络回调?是否有什么东西可以延迟回调执行,直到应用程序再次出现在前台?

    2. 有没有办法在调用onDestroy后保存类似onSaveInstanceState中的Bundle,并在app再次出现在前台时恢复它?

    3. 让我们说HTTP响应包含的信息是敏感的。有没有推荐的方法来处理这种情况?我想在内部存储中保存响应,并在应用程序再次处于前台时检查它,但是我不知道在调用onDestroy之后是否可以这样做,或者它是不是很好敏感数据的想法。

    4. 提前致谢!

1 个答案:

答案 0 :(得分:0)

1)你永远不会错过网络回调。即使你是在后台,你也会被召唤,除非你的整个应用程序(不仅仅是活动被杀死)。您只是在后台接听时收到回叫。

2)否。如果您在下次活动开始时需要网络呼叫的结果,我建议您使用Loader加载数据。这样,您可以在下次查询Loader结果,并仅在需要时启动请求。

3)做我在2中建议的内容,并且不需要这个问题,它全部都在app内存中。