Share via


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><強>#getRequestCount() Request Count:</強> 式,此快取建立之後所發出的 HTTP 要求數目。 <li><強<>#getNetworkCount() Network Count:式/強>式要求數目,這些要求需要使用網路。 <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 (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>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 回應,以便重複使用它們,節省時間和頻寬。

適用於