다음을 통해 공유


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.HttpURLConnection 지원하며 javax.net.ssl.HttpsURLConnection, 플랫폼 제공 캐시 DefaultHttpClient AndroidHttpClient는 없습니다. 설치 및 인스턴스는 스레드로부터 안전합니다.

<h3>HTTP 응답 캐시< 설치/h3> 애플리케이션 시작 시 캐시를 설치하여 애플리케이션의 모든 HTTP 요청을 캐싱할 수 있습니다. 예를 들어 이 코드는 파일 시스템}에 android.content.Context#getCacheDir() application-specific cache directory 10MiB 캐시를 설치합니다.

{@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();
                  }
              }}

이 캐시는 필요에 따라 항목을 제거하여 크기가 10MiB를 초과하지 않도록 합니다. 가장 좋은 캐시 크기는 애플리케이션별로 지정되며 다운로드되는 파일의 크기와 빈도에 따라 달라집니다. 제한을 늘리면 적중률이 향상될 수 있지만 파일 시스템 공간을 낭비할 수도 있습니다.

일부 애플리케이션의 경우 외부 스토리지 디렉터리에 캐시를 만드는 것이 좋습니다. <strong>외부 스토리지 디렉터리에는 액세스 제어가 없으므로 프라이빗 데이터를 포함할 수 있는 캐시에 사용하면 안 됩니다.</strong> 여유 공간이 더 많은 경우가 많지만 외부 스토리지는 선택 사항이며— 사용 가능한 경우에도— 는 사용 중에 사라질 수 있습니다. 를 사용하여 android.content.Context#getExternalCacheDir()외부 캐시 디렉터리를 검색합니다. 이 메서드가 null을 반환하는 경우 애플리케이션은 외부가 아닌 스토리지에서 캐싱하거나 캐싱하지 않아야 합니다. 사용 중에 외부 스토리지가 제거되면 캐시 적중률이 0으로 떨어지고 진행 중인 캐시 읽기가 실패합니다.

캐시를 플러시하면 해당 데이터가 파일 시스템에 강제로 적용됩니다. 이렇게 하면 다음에 활동이 시작될 때 캐시에 기록된 모든 응답을 읽을 수 있습니다.

<h3>캐시 최적화</h3> 캐시 효율성을 측정하기 위해 이 클래스는 세 가지 <통계를 추적합니다. ul><li><strong>#getRequestCount() Request Count:</strong> 이 캐시를 만든 이후 발급된 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캐시를 반환하거나 캐시가 없는 경우 null을 HttpResponseCache반환합니다.

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()

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <알림을 받<>거나 <><중단/종료>합니다.>

(다음에서 상속됨 Object)
Wait(Int64, Int32)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 Object)
Wait(Int64)

현재 스레드가 각성될 때까지 대기하게 하며, 일반적으로 <>알림을 받<거나 <중단/>종료><>하거나 일정량의 실시간 경과가 발생할 때까지 대기합니다.

(다음에서 상속됨 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 응답을 캐시하여 다시 사용할 수 있으므로 시간과 대역폭을 절약할 수 있습니다.

적용 대상