【问题标题】:Android - API Request Callback after onDestroyAndroid - onDestroy 后的 API 请求回调
【发布时间】:2017-05-25 20:27:07
【问题描述】:

希望我能解释清楚……

我试图更好地了解如何在 Android 中处理 HTTP 回调,因此我创建了一个使用 Volley 处理 HTTP 请求的简单应用程序。它只有一个按钮,可以触发对服务的 HTTP 请求,基本上,它只是更新数据库中的一个数字,并在 5 秒后在 JSON 响应中发送它。 Activity 获取响应并在 TextView 中显示响应。我正在一个真实的设备上测试它,它在设置 - 开发人员选项中启用了“不保留活动”选项。

这是我正在测试的场景:

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

所以,问题是:

  1. 向 UI 提供网络响应的最佳实践是什么?我的意思是,如果不是一个简单的操作,假设它是一个注册表单,我接到一个电话或一些迫使我将应用程序发送到后台的东西,任何事情都可能发生,我如何确保不会错过网络回调?有什么东西会延迟回调执行,直到应用再次在前台运行?

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    2) 没有。如果下次活动开始时需要网络调用的结果,我建议你使用 Loader 来加载数据。这样您就可以在下次查询 Loader 结果,并且仅在需要时才开始请求。

    3)按照我在 2 中的建议进行操作,不需要这个问题,它都在应用程序内存中。

    【讨论】:

    • 嗨@Gabe ... 1.“不要错过回调”我的意思是不要错过该块的执行。事实上,我正在获取回调,但我无法使用它来更新我的 UI,因为它已被破坏。 2 & 3. 谢谢,我会用 Loader 试试。顺便说一句,你有什么例子吗?
    • Loader 也解决了这个问题
    • 我正在尝试将 Loaders 与 MVP 结合起来。我已经阅读了一些鼓励使用 Loaders 来保留 Presenters 的文章,但我也从我的 Presenter 发送了一个 Volley 请求(例如登录用户),我遇到了和以前一样的问题:回调可以传递到当视图(Activity、Fragment)不在前台时的演示者。我想过在 Presenter 中使用 Loader,但这似乎不是一个好主意,因为 Presenter 应该避免 android 导入。您知道或知道如何处理这种情况吗?
    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多