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;沒有 或 AndroidHttpClient的平臺提供快取DefaultHttpClient。 安裝和實例是安全線程。

<h3>安裝 HTTP 回應快取</h3> 在應用程式啟動時安裝快取,以啟用所有應用程式的 HTTP 要求的快取。 例如,此程式代碼會在 filesystem} 的 中 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> 雖然它通常有更多的可用空間,但外部記憶體是選擇性的,—即使 available—可以在使用期間消失。 使用 android.content.Context#getExternalCacheDir()擷取外部快取目錄。 如果此方法傳回 Null,您的應用程式應該會回復為非外部記憶體上的快取或快取。 如果在使用期間移除外部記憶體,快取命中率會降至零,且進行中的快取讀取將會失敗。

排清快取會將它的數據強制至文件系統。 這可確保下次活動啟動時,寫入快取的所有回應都可以讀取。

<h3>快取優化</h3> 若要測量快取有效性,此類別會追蹤三項統計數據: <ul><li><強>#getRequestCount() Request Count:</強> 自建立此快取以來發出的 HTTP 要求數目。 <li><strong<>#getNetworkCount() Network Count:/strong> 這些要求需要網路使用的數目。 <li><strong<>#getHitCount() Hit Count:/strong> 這些要求的數目,其回應是由快取所提供。 </ul> 有時要求會導致條件式快取叫用。 如果快取包含回應的過時複本,用戶端會發出條件 GET式 。 然後,如果更新的回應已變更,伺服器就會傳送更新的回應,如果客戶端的複本仍然有效,則會傳送簡短的「未修改」回應。 這類回應會同時遞增網路計數和叫用計數。

改善快取命中率的最佳方式是將網頁伺服器設定為傳回可快取的回應。 雖然此用戶端接受所有 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 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。

(繼承來源 ResponseCache)
ThresholdType

此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。

(繼承來源 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 <notified/em>或<em>interrupted</em> 來喚醒它。<>

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</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 回應,以便重複使用它們,以節省時間和頻寬。

適用於