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; для или AndroidHttpClientне существует предоставленного платформой кэшаDefaultHttpClient. Установка и экземпляры являются потокобезопасны.

<h3>Установка кэша< ответа HTTP/h3> . Включите кэширование всех HTTP-запросов приложения, установив кэш при запуске приложения. Например, этот код устанавливает кэш объемом 10 МиБ в 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> Несмотря на то, что у него часто больше свободного места, внешнее хранилище является необязательным и—даже при наличии—может исчезнуть во время использования. Получите каталог внешнего кэша с помощью 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 (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) {
                  }}

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

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

Свойства

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 поддерживает инфраструктуру 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)

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

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

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

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