HttpResponseCache 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。
[Android.Runtime.Register("android/net/http/HttpResponseCache", DoNotGenerateAcw=true)]
public sealed class HttpResponseCache : Java.Net.ResponseCache, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ICloseable
[<Android.Runtime.Register("android/net/http/HttpResponseCache", DoNotGenerateAcw=true)>]
type HttpResponseCache = class
inherit ResponseCache
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 继承
- 属性
- 实现
注解
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 此类支持java.net.HttpURLConnection
,并且没有平台提供的缓存或 DefaultHttpClient
AndroidHttpClient
。javax.net.ssl.HttpsURLConnection
安装和实例是线程安全的。
<h3>安装 HTTP 响应缓存</h3> 通过在应用程序启动时安装缓存,启用应用程序的所有 HTTP 请求的缓存。 例如,此代码在文件系统}中 android.content.Context#getCacheDir() application-specific cache directory
安装 10 MiB 缓存:
{@code
protected void onCreate(Bundle savedInstanceState) {
...
try {
File httpCacheDir = new File(context.getCacheDir(), "http");
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) {
Log.i(TAG, "HTTP response cache installation failed:" + e);
}
}
protected void onStop() {
...
HttpResponseCache cache = HttpResponseCache.getInstalled();
if (cache != null) {
cache.flush();
}
}}
此缓存将根据需要逐出条目,使其大小不超过 10 MiB。 最佳缓存大小特定于应用程序,具体取决于要下载的文件的大小和频率。 增加限制可能会提高命中率,但它也可能只是浪费文件系统空间!
对于某些应用程序,最好在外部存储目录中创建缓存。 <强>外部存储目录上没有访问控制,因此不应将其用于可能包含专用数据的缓存。</strong> 虽然它通常具有更多的可用空间,但外部存储是可选的,—即使可用—在使用期间可能会消失。 使用 android.content.Context#getExternalCacheDir()
. 检索外部缓存目录。 如果此方法返回 null,应用程序应回退到非外部存储上的缓存或缓存。 如果在使用期间删除了外部存储,缓存命中率将降至零,正在进行的缓存读取将失败。
刷新缓存会强制其数据到文件系统。 这可确保下次启动活动时,写入缓存的所有响应都将可读。
<h3>缓存优化</h3> 为了测量缓存有效性,此类跟踪三个统计信息: <ul><li><强>#getRequestCount() Request Count:
</强> 自创建此缓存以来发出的 HTTP 请求数。 <li><strong/strong>>#getNetworkCount() Network Count:
<, the number of those requests that required network use. <li><strong/strong>>#getHitCount() Hit Count:
< 表示其响应由缓存提供服务的那些请求的数目。 </ul> 有时请求将导致条件缓存命中。 如果缓存包含响应的过时副本,客户端将发出条件 GET
。 然后,如果更新的响应已更改,服务器将发送更新的响应;如果客户端的副本仍然有效,则发送一个简短的“未修改”响应。 此类响应会递增网络计数和命中计数。
提高缓存命中率的最佳方式是配置 Web 服务器以返回可缓存响应。 尽管此客户端遵循所有 HTTP/1.1(RFC 2068) 缓存标头,但它不会缓存部分响应。
<h3>强制网络响应</h3> 在某些情况下,例如在用户单击“刷新”按钮后,可能需要跳过缓存,并从服务器直接提取数据。 若要强制完全刷新,请添加 no-cache
指令:
{@code
connection.addRequestProperty("Cache-Control", "no-cache");
}
如果只需要强制服务器验证缓存的响应,请改用更高效 max-age=0
:
{@code
connection.addRequestProperty("Cache-Control", "max-age=0");
}
<h3>强制缓存响应</h3> 有时,如果资源可供立即使用,则希望显示资源,但不能显示资源。 这可用于应用程序,以便在等待下载最新数据时显示 内容 。 若要限制对本地缓存资源的请求,请添加 only-if-cached
该指令:
{@code
try {
connection.addRequestProperty("Cache-Control", "only-if-cached");
InputStream cached = connection.getInputStream();
// the resource was cached! show it
} catch (FileNotFoundException e) {
// the resource was not cached
}
}
在过时响应优于无响应的情况下,此方法效果更好。 若要允许过时缓存的响应,请使用 max-stale
具有最大过期时间的指令(以秒为单位):
{@code
int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
connection.addRequestProperty("Cache-Control", "max-stale=" + maxStale);
}
<h3>使用早期版本</h3> 在 Android 4.0(冰淇淋三明治)中添加了此类。 使用反射启用响应缓存,而不会影响早期版本:
{@code
try {
File httpCacheDir = new File(context.getCacheDir(), "http");
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
} catch (Exception httpResponseCacheNotAvailable) {
}}
适用于 . 的 android.net.http.HttpResponseCache
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
HitCount |
返回缓存提供的响应的 HTTP 请求数。 |
Installed |
返回当前安装的 |
JniIdentityHashCode |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
JniPeerMembers |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 |
NetworkCount |
返回要求网络提供响应或验证本地缓存响应的 HTTP 请求数。 |
PeerReference |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
RequestCount |
返回已发出的 HTTP 请求总数。 |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 (继承自 ResponseCache) |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 (继承自 ResponseCache) |
方法
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
Close() |
卸载缓存并释放任何活动资源。 |
Delete() |
卸载缓存并删除其所有存储的内容。 |
Dispose() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
Dispose(Boolean) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
Flush() |
强制对文件系统执行缓冲操作。 |
Get(URI, String, IDictionary<String,IList<String>>) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
Install(File, Int64) |
创建新的 HTTP 响应缓存,并将其设置为系统默认缓存。 |
JavaFinalize() |
当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
MaxSize() |
返回此缓存应用于存储其数据的最大字节数。 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
Put(URI, URLConnection) |
允许协议处理程序在检索资源后缓存数据。 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
Size() |
返回当前用于在此缓存中存储值的字节数。 |
ToArray<T>() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
Wait() |
使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<>< (继承自 Object) |
Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。 (继承自 Object) |
Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.Finalized() |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 |
GetJniTypeName(IJavaPeerable) |
缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 |