存储 HTTP/REST 个请求以防无法连接
Store HTTP/REST requests in case no connection is available
我目前正在开发一个 android 应用程序,使用 HTTP/REST 请求与我的后端通信。我还没有使用任何特定的库,因为直到现在内置 HttpURLConnection works fine for me. However I would like to have some kind of fallback mechanism if my requests fail due connectivity issues. A similiar problem is also described in 但还没有得到回答,其他相关帖子更关注缓存旧响应以在没有可用连接时将请求重定向到缓存。
到目前为止,我考虑过使用 Volley,但据我所知,它只允许重试失败的请求,直到它最终连接。我认为缓存失败的请求并在我通过 BroadcastReceiver 注册连接状态更改后尝试重新发送它是一个更干净的解决方案。是否有适合我的现有解决方案,还是我必须建立一个内部数据库并自己管理整个过程?
TL;DR
我想在我的设备离线时将失败的 HTTP/REST 请求存储在我的 android 设备上,并在设备可以再次建立连接时重新发送它们。我在找什么?
我在报告服务中遇到了同样的情况。我实现的是 Service that receives requests and queues them. In a separate thread (started when the service starts) it checks the queue and attempts to make the connection. If you use a BlockingQueue 你有线程之间的 'signalling' 免费,所以你不需要空闲轮询。
您可以为 WifiManager.WIFI_STATE_CHANGED_ACTION and/or ConnectivityManager.CONNECTIVITY_ACTION 事件设置接收器,以便启动服务或唤醒线程并在连接再次建立时尝试重新发送。
我推荐一个服务,这样您就可以将所有这些从您的活动代码中分离出来,并有一些工具来启动和停止它。我个人使用了 IntentService,因为它允许我通过 Intents 序列化请求,并让 OS 为我处理 Intent 管理发送。您可能会以不同的方式实现它,即使没有服务,也可以只使用 Singleton 对象。
如果您还需要在您的应用不是 运行 时存储它们,我会使用 SQLite 数据库。
正如@Sebastian 所写,您可以自己编写队列处理程序,或者检查现有的实现,例如 android-priority-jobqueue 是否对您没有用。
我目前正在开发一个 android 应用程序,使用 HTTP/REST 请求与我的后端通信。我还没有使用任何特定的库,因为直到现在内置 HttpURLConnection works fine for me. However I would like to have some kind of fallback mechanism if my requests fail due connectivity issues. A similiar problem is also described in 但还没有得到回答,其他相关帖子更关注缓存旧响应以在没有可用连接时将请求重定向到缓存。
到目前为止,我考虑过使用 Volley,但据我所知,它只允许重试失败的请求,直到它最终连接。我认为缓存失败的请求并在我通过 BroadcastReceiver 注册连接状态更改后尝试重新发送它是一个更干净的解决方案。是否有适合我的现有解决方案,还是我必须建立一个内部数据库并自己管理整个过程?
TL;DR
我想在我的设备离线时将失败的 HTTP/REST 请求存储在我的 android 设备上,并在设备可以再次建立连接时重新发送它们。我在找什么?
我在报告服务中遇到了同样的情况。我实现的是 Service that receives requests and queues them. In a separate thread (started when the service starts) it checks the queue and attempts to make the connection. If you use a BlockingQueue 你有线程之间的 'signalling' 免费,所以你不需要空闲轮询。
您可以为 WifiManager.WIFI_STATE_CHANGED_ACTION and/or ConnectivityManager.CONNECTIVITY_ACTION 事件设置接收器,以便启动服务或唤醒线程并在连接再次建立时尝试重新发送。
我推荐一个服务,这样您就可以将所有这些从您的活动代码中分离出来,并有一些工具来启动和停止它。我个人使用了 IntentService,因为它允许我通过 Intents 序列化请求,并让 OS 为我处理 Intent 管理发送。您可能会以不同的方式实现它,即使没有服务,也可以只使用 Singleton 对象。
如果您还需要在您的应用不是 运行 时存储它们,我会使用 SQLite 数据库。
正如@Sebastian 所写,您可以自己编写队列处理程序,或者检查现有的实现,例如 android-priority-jobqueue 是否对您没有用。