【发布时间】:2017-05-25 20:27:07
【问题描述】:
希望我能解释清楚……
我试图更好地了解如何在 Android 中处理 HTTP 回调,因此我创建了一个使用 Volley 处理 HTTP 请求的简单应用程序。它只有一个按钮,可以触发对服务的 HTTP 请求,基本上,它只是更新数据库中的一个数字,并在 5 秒后在 JSON 响应中发送它。 Activity 获取响应并在 TextView 中显示响应。我正在一个真实的设备上测试它,它在设置 - 开发人员选项中启用了“不保留活动”选项。
这是我正在测试的场景:
- 启动应用程序。
- 点击触发 HTTP 请求的按钮。
- 点击按钮后,立即点击设备的主页按钮将应用程序发送到后台。由于“不保留活动”选项而调用了 onDestroy 方法。
- 等待几秒钟,等待 HTTP 响应。我可以看到设备得到它,因为它已打印在 logcat 监视器中并且数据库已更新。
- 在运行回调之前,我检查活动是否仍然存在。由于活动已被销毁,回调被忽略。如果应用程序从后台恢复,则不会发生崩溃,但会丢失网络响应。另外,如果我再次点击该按钮,它会发送一个新的 HTTP 请求并再次增加数字...
所以,问题是:
向 UI 提供网络响应的最佳实践是什么?我的意思是,如果不是一个简单的操作,假设它是一个注册表单,我接到一个电话或一些迫使我将应用程序发送到后台的东西,任何事情都可能发生,我如何确保不会错过网络回调?有什么东西会延迟回调执行,直到应用再次在前台运行?
有没有办法在调用 onDestroy 后保存类似 onSaveInstanceState 中的 Bundle 并在应用再次处于前台时恢复它?
假设 HTTP 响应包含的信息是敏感信息。有没有推荐的方法来处理这种情况?我正在考虑将响应保存在内部存储中并在应用程序再次处于前台时检查它,但我不知道在调用 onDestroy 之后是否可以这样做,或者这不是一个好主意敏感数据。
提前致谢!
【问题讨论】:
标签: android callback android-volley android-lifecycle ondestroy