HttpResponseCache 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。
[Android.Runtime.Register("android/net/http/HttpResponseCache", DoNotGenerateAcw=true)]
public sealed class HttpResponseCache : Java.Net.ResponseCache, IDisposable, 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;且 或 沒有平台提供的快取。DefaultHttpClientAndroidHttpClient 安裝和實例都是執行緒安全的。
<h3>安裝 HTTP 回應快取</h3> 透過在應用程式啟動時安裝快取,啟用應用程式所有 HTTP 請求的快取。 例如,這段程式碼會在檔案系統}的 安裝一個 10 MiB 快取 android.content.Context#getCacheDir() application-specific cache directory :
{@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><強>#getNetworkCount() Network Count:</強> 需要使用網路的請求數量。
<LI><強/>#getHitCount() Hit Count:<強> 表示快取所回應的請求數量。
</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) {
}}
Java 文件 android.net.http.HttpResponseCache。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| HitCount |
回傳快取所提供的回應 HTTP 請求數量。 |
| Installed |
回傳目前安裝 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| JniPeerMembers |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 |
| NetworkCount |
回傳需要網路提供回應或驗證本地快取回應的 HTTP 請求數量。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| RequestCount |
回傳已發出的 HTTP 請求總數。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 ResponseCache) |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 ResponseCache) |
方法
| 名稱 | Description |
|---|---|
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Close() |
卸載快取並釋放所有活動資源。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| Delete() |
卸載快取並刪除所有儲存的內容。 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| Equals(Object) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| Flush() |
強制緩衝操作到檔案系統。 |
| Get(URI, String, IDictionary<String,IList<String>>) |
根據請求的 URI、請求方法和請求標頭,取得快取的回應。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| Install(File, Int64) |
建立一個新的 HTTP 回應快取,並將其設為系統預設快取。 |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| MaxSize() |
回傳快取應使用的最大位元組數來儲存資料。 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Put(URI, URLConnection) |
允許協定處理者在取得資源後快取資料。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| Size() |
回傳目前用於儲存快取值的位元組數。 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
快取 HTTP 和 HTTPS 回應到檔案系統,使其可重複使用,節省時間與頻寬。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |