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.HttpURLConnectionjavax.net.ssl.HttpsURLConnection;没有平台为 DefaultHttpClientAndroidHttpClient提供的缓存。 安装和实例是线程安全的。

<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.HttpResponseCacheJava 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
HitCount

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

Installed

返回当前安装的 ,如果未安装 HttpResponseCache缓存或它不是 , HttpResponseCache则返回 null。

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

适用于