HttpResponseCache 类

定义

缓存对文件系统的 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
继承
HttpResponseCache
属性
实现

注解

缓存对文件系统的 HTTP 和 HTTPS 响应,以便可以重复使用它们,从而节省时间和带宽。 此类支持java.net.HttpURLConnection,并且没有平台提供的缓存或 DefaultHttpClient AndroidHttpClientjavax.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.HttpResponseCacheJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
HitCount

返回缓存提供的响应的 HTTP 请求数。

Installed

返回当前安装的 HttpResponseCache,如果没有安装缓存,或者它不是 HttpResponseCachenull。

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 响应,以便可以重复使用它们,从而节省时间和带宽。

适用于