5

我用来获取图像的服务,就像许多这样的网站一样,没有缓存控制标头,指示图像应该被缓存多长时间。Volley 默认使用 http 缓存控制标头来决定在磁盘上缓存图像多长时间。如何覆盖此默认行为并将此类图像保留一段时间?

谢谢

4

1 回答 1

11

我需要将默认缓存策略更改为“全部缓存”策略,而不考虑 HTTP 标头。

您想缓存一段时间。有几种方法可以做到这一点,因为代码中有很多地方会“触及”网络响应。我建议对HttpHeaderParser(parseCacheHeaders第 39 行的方法) 进行编辑:

Cache.Entry entry = new Cache.Entry();
entry.data = response.data;
entry.etag = serverEtag;
entry.softTtl = softExpire;
entry.ttl = now; // **Edited**
entry.serverDate = serverDate;
entry.responseHeaders = headers;

另一个Cache.Entry上课:

/** True if the entry is expired. */
public boolean isExpired() {
    return this.ttl + GLOBAL_TTL < System.currentTimeMillis();
}

/** True if a refresh is needed from the original data source. */
public boolean refreshNeeded() {
    return this.softTtl + GLOBAL_TTL < System.currentTimeMillis();
}

whereGLOBAL_TTL是一个常数,表示您希望每个图像在缓存中存在的时间。

于 2013-08-06T07:31:26.893 回答