【问题标题】:Saving/Serializing OkHttp/Retrofit Requests保存/序列化 OkHttp/改造请求
【发布时间】:2016-10-19 04:35:44
【问题描述】:

我希望能够从崩溃/关闭应用程序或只是设备断开连接中恢复。

目前,当我检测到我的 Android 设备的网络中断时,我将使用 RetroFit2 创建的调用保存在堆栈中(以便稍后处理)。如果用户要关闭应用程序或重新启动设备,我将无法在任何地方保存这些调用...

我的问题如下,如何保存 RetroFit 调用或 OkHttp3 请求? 它们都不是可序列化的,或者我也不能将它们转换为我在代码中看到的字符串。

【问题讨论】:

    标签: android retrofit2 okhttp okhttp3


    【解决方案1】:

    使用 Yigit Boyar 的 android priority jobqueue(谷歌安卓开发人员之一)。它会跟踪您的工作,检测网络变化(并做出相应的响应),甚至在设备重启后仍然存在(更不用说应用程序崩溃了)。加上大量其他功能。看看吧。这不完全符合您的要求,但它是一个更好的解决方案。这是魔法。

    从 v2 开始,Job Queue 可以与 JobScheduler 或 GCMNetworkManager 集成。这种集成允许 Job Queue 根据其拥有的 Jobs 的标准唤醒应用程序。您可以在相关的 wiki 页面上查看详细信息。 Scheduler API 非常灵活,如果您的目标市场没有 Google Play 服务,您可以实现它的自定义版本。

    试试吧,你会很高兴你做到了,就像我一样。它填补了我花了数周时间用 spit、ducktape 和信念一起编写的代码中的巨大空白。

    【讨论】:

    • 谢谢猫王,不过我没有看到它会如何从应用程序崩溃中恢复,你有任何关于它是否可以工作的指示吗?
    • 我从应用程序崩溃中恢复,甚至从我的使用中重启手机。它的作用是挂接到 GCMNetworkManager(Google Play 服务)或框架的 JobScheduler(d.android.com/reference/android/app/job/JobScheduler.html),唤醒应用程序和作业管理器,执行您计划执行的任何代码。
    • 除非 Google play 服务和/或 JobScheduler 崩溃,并且无法重新启动(除非你的手机爆炸,否则永远不会发生 - 看着你注 7),计划任务将会发生。
    • 听起来不错,我会检查一下并验证您的答案是否有效。谢谢!
    • 我会将您的答案标记为正确。然而,这并没有直接解决真正的潜在问题,即 POST/GET/Whatever 请求本身的序列化。我没有找到这样的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 2017-02-13
    • 2021-11-02
    • 1970-01-01
    • 2016-01-25
    • 2014-07-12
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多