4

我目前正在开发一个使用 HTTP/REST 请求与我的后端通信的 android 应用程序。我还没有使用任何特定的库,因为到目前为止,内置的HttpURLConnection对我来说很好。但是,如果我的请求由于连接问题而失败,我希望有某种回退机制。https://stackoverflow.com/questions/31786486/android-volley-internet-queue中也描述了一个类似的问题,但尚未得到答复,其他相关帖子更侧重于缓存较旧的响应以将请求重定向到缓存没有可用的连接。

到目前为止,我考虑使用Volley,但据我了解,它只允许重试失败的请求,直到它最终连接。我认为缓存失败的请求并在我通过 BroadcastReceiver 注册连接状态的更改后尝试重新发送它是一种更简洁的解决方案。是否有现有的解决方案可以为我做到这一点,还是我必须建立一个内部数据库并自己管理整个过程?

TL;博士

我想在我的设备离线时将失败的 HTTP/REST 请求存储在我的 android 设备上,并在设备可以再次建立连接时重新发送它们。我在找什么?

4

2 回答 2

2

我在报告服务中遇到了同样的情况。我实现的是一个接收请求并将它们排队的服务。在一个单独的线程中(在服务启动时启动),它检查队列并尝试建立连接。如果您使用BlockingQueue,则您可以免费在线程之间进行“信号传输”,因此您无需进行空闲轮询。

您可以为WifiManager.WIFI_STATE_CHANGED_ACTION和/或ConnectivityManager.CONNECTIVITY_ACTION事件设置接收器,以便您启动服务或唤醒线程并在连接再次启动时尝试重新发送。

我建议使用服务,这样您就可以将所有这些从您的活动中的代码中分离出来,并拥有一些用于启动和停止它的设施。我个人使用了IntentService,因为它允许我通过 Intent 序列化请求,并让操作系统为我处理 Intent 管理发送。您可能会以不同的方式实现它,即使没有 Service,只需使用 Singleton 对象。

如果您的应用程序未运行时还需要存储它们,我会使用 SQLite 数据库。

于 2015-08-06T09:05:58.123 回答
1

正如@Sebastian 所写,您可以自己编写队列处理程序,或者检查现有的实现,例如android-priority-jobqueue是否对您没有用处。

于 2015-08-06T09:17:36.163 回答