Поделиться через


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-запросов приложения путем установки кэша при запуске приложения. Например, этот код устанавливает кэш 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 МиБ. Максимальный размер кэша зависит от размера и частоты загрузки файлов. Увеличение предела может повысить скорость попадания, но она также может просто тратить пространство файловой системы!

Для некоторых приложений может потребоваться создать кэш во внешнем каталоге хранилища. <Strong>Нет элементов управления доступом во внешнем каталоге хранилища, поэтому его не следует использовать для кэшей, которые могут содержать частные данные.</strong> , хотя он часто имеет больше свободного места, внешнее хранилище является необязательным и— даже если доступно>8212; может исчезнуть во время использования. Получение каталога внешнего кэша с помощью android.content.Context#getExternalCacheDir(). Если этот метод возвращает значение NULL, приложение должно вернуться к кэшированию или кэшированию не во внешнем хранилище. Если во время использования внешнее хранилище удаляется, скорость попадания кэша будет снижаться до нуля, а текущие операции чтения кэша завершаются сбоем.

Очистка кэша заставляет данные файловой системы. Это гарантирует, что все ответы, записанные в кэш, будут доступны для чтения при следующем запуске действия.

<h3>Cache Optimization</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) {
                  }}

Документация по Java для android.net.http.HttpResponseCache.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Свойства

Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
HitCount

Возвращает количество HTTP-запросов, ответ которых был предоставлен кэшом.

Installed

Возвращает установленный в данный момент параметр или значение NULL, если кэш не установлен HttpResponseCacheили он не HttpResponseCacheявляется.

JniIdentityHashCode

Кэширует ответы HTTP и HTTPS в файловую систему, чтобы они могли использоваться повторно, экономя время и пропускную способность.

(Унаследовано от Object)
JniPeerMembers

Кэширует ответы HTTP и HTTPS в файловую систему, чтобы они могли использоваться повторно, экономя время и пропускную способность.

NetworkCount

Возвращает количество HTTP-запросов, необходимых сети для предоставления ответа или проверки локально кэшированного ответа.

PeerReference

Кэширует ответы HTTP и HTTPS в файловую систему, чтобы они могли использоваться повторно, экономя время и пропускную способность.

(Унаследовано от Object)
RequestCount

Возвращает общее количество http-запросов, выполненных.

ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от ResponseCache)
ThresholdType

Этот API поддерживает инфраструктуру Mono для 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> или <эм>прерванного</em>.

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>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 в файловую систему, чтобы они могли использоваться повторно, экономя время и пропускную способность.

Применяется к