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