Language

HttpResponseCache クラス

定義

ファイルシステムへの 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をサポートします。 DefaultHttpClient または AndroidHttpClient用にプラットフォームによって提供されるキャッシュはありません。 インストールとインスタンスはスレッド セーフです。

<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> 多くの場合、空き領域が増えますが、外部ストレージは省略可能であり、#8212 です。使用可能な場合でも>#8212;は使用中に消える可能性があります。 android.content.Context#getExternalCacheDir()を使用して外部キャッシュ ディレクトリを取得します。 このメソッドが null を返す場合、アプリケーションは、外部以外のストレージでキャッシュまたはキャッシュしないようにフォールバックする必要があります。 使用中に外部ストレージが削除されると、キャッシュヒット率はゼロに低下し、進行中のキャッシュ読み取りは失敗します。

キャッシュをフラッシュすると、そのデータが強制的にファイル システムに送信されます。 これにより、キャッシュに書き込まれたすべての応答が、次回アクティビティが開始された時点で読み取り可能になります。

<h3>Cache Optimization</h3> このクラスは、キャッシュの有効性を測定するために、 <ul><li><strong>#getRequestCount() Request Count:</strong> このキャッシュが作成されてから発行された HTTP 要求の数という 3 つの統計情報を追跡します。 <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 (アイスクリームサンドイッチ) で追加されました。 リフレクションを使用して、以前のリリースに影響を与えずに応答キャッシュを有効にします。

{@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ドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

Name 説明
Class

この Objectのランタイム クラスを返します。

(継承元 Object)
Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
HitCount

キャッシュによって応答が提供された HTTP 要求の数を返します。

Installed

現在インストールされている HttpResponseCacheを返します。キャッシュがインストールされていない場合、または HttpResponseCacheでない場合は null を返します。

JniIdentityHashCode

相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。

(継承元 Object)
JniManagedPeerState

ファイルシステムへの HTTP 応答と HTTPS 応答をキャッシュして再利用できるため、時間と帯域幅が節約されます。

(継承元 JavaObject)
JniPeerMembers

ファイルシステムへの HTTP 応答と HTTPS 応答をキャッシュして再利用できるため、時間と帯域幅が節約されます。

NetworkCount

ネットワークが応答を提供するか、ローカルにキャッシュされた応答を検証する必要がある HTTP 要求の数を返します。

PeerReference

このJava ピアの JNI オブジェクト参照を取得します。

(継承元 Object)
RequestCount

行われた HTTP 要求の合計数を返します。

ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 ResponseCache)
ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。

(継承元 ResponseCache)

メソッド

Name 説明
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()

このオブジェクトのモニターで待機している 1 つのスレッドを起動します。

(継承元 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>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

Name 説明
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 応答をキャッシュして再利用できるため、時間と帯域幅が節約されます。

拡張メソッド

Name 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

ファイルシステムへの HTTP 応答と HTTPS 応答をキャッシュして再利用できるため、時間と帯域幅が節約されます。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象