Android:仅在更改时下载文件

时间:2011-03-22 18:08:46

标签: android http

我想编写一个需要来自网络数据的Android应用程序。此信息存储在json文件中。来自json文件的数据保存在设备上。为了使其保持最新,我需要每小时检查一次文件中的更改。

由于远程文件可能变得非常大,我只想在它与以前下载的版本不同时下载它。我考虑过使用Last-Modified-Header of HTTP。

我提出了以下工作流程(伪代码):

  • data = null; data_timestamp = null;
  • 每小时重复:
    • new_timestamp标题向网址和选项Last-Modified发出HTTP头请求。
    • 如果是data==nullnew_timestamp > data_timestamp那么
      • 向网址发出正常的HTTP请求
      • 保存到data并设置data_timestamp = new_timestamp

你认为这是一种合理的方法吗?我可以使用if-modified-since HTTP标头来获取自上次下载以来已更改的数据。这样可以节省一个请求。如果它已经改变,则提供包含新数据的主体,如果没有,则主体为空。

我还考虑过使用ETag,因为我通常想要下载文件是否有新内容(如果修改日期已经改变则没有),但是我的网络服务器(nginx)不支持创建etags和我出于性能原因,不希望在服务器端涉及另一层。

2 个答案:

答案 0 :(得分:2)

您应该考虑使用ETags而不是依赖HTTP HEAD。它们是supported in javax.ws.rs.core with the EntityTag class

您可以看到Java-based example using Spring来帮助解释一些概念。

答案 1 :(得分:0)

我解决了上面描述的问题:使用if-modified-since HTTP标头下载文件。 ngnix网络服务器可以配置为返回有关此标头的正确信息。