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
- Наследование
- Атрибуты
- Реализации
Комментарии
Кэширует ответы 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 |
Возвращает класс среды выполнения этого |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
HitCount |
Возвращает количество HTTP-запросов, ответ которых был предоставлен кэшом. |
Installed |
Возвращает установленный в данный момент параметр или значение NULL, если кэш не установлен |
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 в файловую систему, чтобы они могли использоваться повторно, экономя время и пропускную способность. |