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
和 javax.net.ssl.HttpsURLConnection
;没有平台为 DefaultHttpClient
或 AndroidHttpClient
提供的缓存。 安装和实例是线程安全的。
<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>外部存储目录上没有访问控制,因此不应将其用于可能包含私有数据的缓存。</strong> 尽管它通常具有更多的可用空间,但外部存储是可选的,—即使可用—在使用过程中可能会消失。 使用 android.content.Context#getExternalCacheDir()
检索外部缓存目录。 如果此方法返回 null,则应用程序应回退到不缓存或非外部存储上的缓存。 如果在使用过程中删除了外部存储,缓存命中率将降至零,并且正在进行的缓存读取将失败。
刷新缓存会强制其数据到文件系统。 这可确保写入缓存的所有响应在下次启动活动时都是可读的。
<h3>缓存优化</h3> 为了度量缓存有效性,此类跟踪三个统计信息: <ul><li><strong>#getRequestCount() Request Count:
</strong> 自创建此缓存以来发出的 HTTP 请求数。 <li><strong>#getNetworkCount() Network Count:
</strong> 需要网络使用的请求数。 <li><strong>#getHitCount() Hit Count:
</strong> :缓存为其响应提供服务的请求数。 </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 (Ice Cream Sandwich) 。 使用反射在不影响早期版本的情况下启用响应缓存:
{@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 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
属性
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) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 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 响应,以便可以重复使用它们,从而节省时间和带宽。 |