Что такое кэш в телефоне андроид
Что такое кэш приложений на андроид? Кэш представляет собой специально выделенную область оперативной памяти, которая предназначена для сохранения файлов, необходимых для корректной работы установленных приложений. Основная задача — оптимизировать и ускорить работу мобильного устройства.
Операционную систему Android нужно периодически чистить от кэшированного мусора
Кэшированные данные — что это на андроид? Это, например, эскизы в программах просмотра графических объектов. Благодаря кэшу у системного процессора не будет необходимости повторно нагружаться для пересчета изображения.
К сведению! В кэше браузеров сохраняются макеты страниц, которые пользователь посещает чаще остальных, чтобы уменьшить время ожидание и растраты трафика.
Что такое кэшированные данные
Слово Cache с английского языка – «тайник». Когда человек впервые посещает веб-сайт, открывает приложение или программу, телефон автоматически начинает запись появившейся страницы – кэширование. Загруженные данные остаются на устройстве в виде временных или постоянных файлов. При повторном просмотре сохраненная информация позволяет быстро воспроизвести исходную страницу.
Скрытая память android бывает 3 типов.
Dalvik-Cache
Временные файлы кодов установленных приложений хранятся на промежуточном буфере и для быстрого доступа могут запрашиваться виртуальной машиной Dalvik. На таком программном обеспечении осуществляется работа всех телефонов на базе Андроид.
Удалять такие сведения рекомендуется только при возникновении серьезных проблем с телефоном. Действия по очистке проводят, когда устройство включено в специальном режиме, где осуществляется сброс всех настроек.
Впоследствии система может заново восстановить утраченные файлы.
Системный кэш
На мобильном устройстве находятся предустановленные программы. Их данные называют системными. Они необходимы, чтобы программы правильно функционировали. При удалении временных файлов возможен сбой в их работе.
Проводить очищение нужных программ считается нецелесообразным.
Кэш в приложениях на телефоне
В программах, которые пользователь скачивает из интернета самостоятельно, кэшированные данные содержат все сведения о работе приложения и настройках. Они занимают определенное количество памяти.
Постоянные файлы создаются для быстрого входа в игры и программы с большим объемом.
Временный кэш сохраняется на устройстве при просмотре видеороликов, музыкальных и графических файлов в установленных программах. Например, при входе на страничку в соцсетях, старые изображения в ленте появляются сразу и могут отображаться даже без интернета.
Локальная копия создается с помощью браузера.
- Как связать шарф-хомут спицами: схемы для начинающих
- Как принимать фолиевую кислоту при планировании беременности женщине и мужчине
- Оказание первой помощи при артериальном кровотечении
Почему важна чистка кэша на Android
Многие пользователи, особенно при замедлении работы устройства, задаются вопросом, что значит очистить кэш в телефоне андроид. Эта процедура позволяет высвободить пространство оперативной и внутренней памяти, что положительно скажется на работоспособности операционной системы. Весомый недостаток использования кэша — постоянный его рост.
Что такое Андроид ТВ — подробная информация об устройстве
Если регулярно его не очищать, это неизбежно приведет к нехватке памяти для корректной работы основных приложений. Результат — данные не оптимизируют работу телефона как должны, а, наоборот, замедляют.
Обратите внимание! Удалять кэшированные данные полностью безопасно, если соблюдать определенные правила.
При стирании данных работающих приложений может возникнуть системный сбой. Именно поэтому предварительно рекомендуется закрыть, а не свернуть все работающие приложения.
Специализированное ПО
Не хочется чистить кэш вручную? Установите стороннее ПО. Приложения кроме чистки памяти оснащены функциями, позволяющими ускорить работу устройства. Рассмотрим лучшие приложения.
CCleaner
Скачайте из Play Маркета по адресу: https://play.google.com/store/apps/details?id=com.piriform.ccleaner&gl=UA. В последней версии появилась функция «Статистика приложений». Показывает, как отдельные программы влияют на работоспособность устройства.
Power Clean
Скачайте утилиту по адресу: https://play.google.com/store/apps/details?id=com.powerful.power.clean&hl=ru. Особенности:
- Удаление файлов неиспользуемых продолжительное время;
- Анализ работы аккумулятора;
- Слежение за загрузкой CPU.
Какие существуют виды кэша на андроид-устройствах
Что такое виджеты для андроида — подробная информация
Cache-память в операционной системе Android делится на три разновидности. С особенностями каждой следует ознакомиться более детально:
- системный cache предназначен для корректной работы программ и приложений, которые обеспечивают функционирование операционной системы смартфона. В этот раздел обычный пользователь зайти не сможет, поскольку неправильные действия способны привести к непредсказуемым последствиям;
- Dalvik — это внутренняя системная область, которая отведена под память виртуальной машины, которая носит название «Далвик». В этот раздел у пользователей тоже закрыт доступ, поскольку удаление важных системных файлов приведет к поломке мобильного устройства;
- кэшированные данные приложений пользователя — это раздел внутренней памяти, который не только можно, но и нужно периодически освобождать. Все рекомендации относительно того, как очистить кэш, касаются именно этого вида данных.
Периодически необходимо очищать память в телефоне
Ознакомившись с основными разновидностями cache, необходимо изучить традиционные способы его удаления.
Зачем нужно очищать кэш?
После того, как мы определились с тем, что это такое кэш и что значит кэшированные данные на телефоне. Необходимо разъяснить вопрос о том, зачем необходимо регулярно чистить кэш и удалять данные с него.
Также вам обязательно нужно знать для чего необходима папка Thumbnails занимающее более ГБ памяти вашего устройства и как удалив её освободить значимую часть памяти Андроид устройства.
В процессе работы вашего устройства его Cache начинает переполняться множеством разнообразных данных. Фотографии, которые вы когда-то смотрели, сайты, которые как-то посещали, приложения, которые запускали – все это оставляет след в памяти вашего устройства. Причём, в большинстве случаев, такие кэшированные данные лежат бесполезным грузом, ведь существует множество сайтов, которые мы посетили только раз, приложения, которые запускали только раз, фото, которые более не посмотрим и так далее.
Поэтому, дабы кэшированные данные не забивали память вашего устройства под завязку и не способствовали появлению ошибки DF-DLA 15, рекомендуется регулярно чистить кэш. Как это сделать я расскажу ниже.
Что будет, если удалить кэш на андроиде
Очистить кэш на андроиде — что это значит? Многие пользователи переживают, что удаление этих данных приведет к сбою в работе гаджета или будет утеряна пользовательская информация, но это не так. Оптимизация cache-памяти подразумевает не полное удаление программы, а лишь некоторых файлов. Эта операция не несет совершенно никакого вреда, даже, напротив, улучшает работу смартфона.
Что такое Гугл Плей сервисы — подробная информация
Единственное, что следует помнить — кэшированные данные содержат в себе информацию, необходимую для правильного запуска и работы программ. Чтобы предотвратить системные сбои в работе некоторых утилит из-за очищения кэша, нужно придерживаться следующих правил:
- прежде чем очищать оперативную память в телефоне, необходимо закрыть все активные приложения;
- предварительно сохранить всю важную информацию, которая может быть непосредственно в самом приложении.
Обратите внимание! В большинстве случаев после подчищения памяти необходима повторная авторизация в системе. Именно поэтому предварительно нужно убедиться, что пользователь помнит логин и пароль.
Очистить кэш (все браузеры)
Кэш — это временное хранилище которое содержит в себе определенную информацию (картинки, видео, аудио и др.), которую используют браузеры для ускорения загрузки страниц веб-сайтов которые вы однажды уже посетили.
Память кэш имеет ограничения достигнув которого пользователь может испытывать дискомфорт при использовании браузера. Именно по этому, кэш необходимо время от времени очищать. Именно о том, как очистить кэш-память в самых популярных браузерах мы и поговорим сейчас.
Удалить кэш в Google Chrome
Переходим в меню «Настройка и управление Google Chrome» (в самом верху, справа, под кнопкой закрытия браузера) → «Показать дополнительные настройки» → «Очистить историю…» → «Изображения и другие файлы».
По умолчанию выбрана чистка за все время пользования браузером но есть возможность изменить это значение на очистку за час работы, за сутки, за неделю и месяц.
Хочется также отметить, что выполнив все вышеописанные действия вы потеряете:
- посещенные веб-адреса, перечисленные на странице «История»;
- кэшированный текст посещенных страниц;
- снимки наиболее часто посещаемых страниц на странице быстрого доступа;
- все IP-адреса, извлеченные из посещенных страниц.
Почистить кэш в Mozilla
Открываем меню, кнопка которого находится в самом верху, в панели управления браузером, переходим в настройки на вкладку «Приватность», находим «удалить вашу недавнюю историю», выбираем период за который хотите удалить ее, жмем «Подробности» и оставляем галочку на пункте «Кэш» и кликаем на кнопку «Удалить сейчас».
В разделе «История» можно выставить будет ли браузер запоминать историю посещений сайтов или нет. Если вы не хотите больше очищать кэш-память — выставьте «Не будет запоминать историю».
Удалить кэш в Opera
Кэш в браузере Opera хранится на жестком диске (HDD). Вам будет предложено выбрать очистку памяти, ее увеличение или отключение кэширования.
Для последних версий:
Сверху кликаем на иконку «Opera», выбираем Настройки (или Alt+P) → Безопасность → в разделе «Конфиденциальность» нажимаем «Очистить историю посещений…» → галочку «Очистить кэш» → в выпадающем меню выбираем «с самого начала» и подтверждаем.
Для версии 12.17 и ниже:
Переходим в раздел Меню → Настройки → Общие настройки (или Ctrl+F12) → Расширенные → История. Напротив «Дисковый кэш» жмем «Очистить». Можно поставить галочку «Очищать при выходе» — очистка будет производится при каждом закрытии браузера и память не будет засорятся.
Далее жмем «ОК» или просто закрываем окно.
Способы удаления кэша
Осуществлять оптимизацию работы устройства можно несколькими способами. Все они одинаково эффективны и просты в реализации.
Классический способ
Самый безопасный способ высвобождения пространства оперативной памяти — это использование внутренних инструментов от Android. Операционная система устройства способна самостоятельно избавиться от всей лишней информации и пользовательских данных.
Инструкция выглядит следующим образом:
- Пройти путь: «Настройки» — «Хранилище» или «Память» (название разделов может изменяться в зависимости от марки телефона и версии операционной системы).
- Среди доступных опций выбрать раздел «Данные кэша». Во всплывающем окне на дисплее будет написано «Будут удалены кэшированные данные всех приложений». Для подтверждения действия нужно нажать на «Ок».
Классический метод удаления кэша с помощью стандартных инструментов
На этом все. На удаление ненужных системных файлов может уйти 2-7 сек.
Сторонние утилиты для удаления кэшированных данных
Избавиться от ненужной информации можно с помощью специальных приложений, основная задача которых оптимизировать работу гаджета. Найти и скачать их можно с Play Market.
Обратите внимание! Последнее время наиболее популярной программой является Clean Master. Пользование утилитой бесплатное.
Для очищения данных достаточно открыть программу и перейти во вкладку «Файлы в корзине». Далее необходимо выбрать приложения, в которых нужно удалить кэш. В завершении тапнуть на кнопку «Clean JUNK».
Что умеет делать программа:
- освобождает объем оперативной памяти (ОЗУ);
- утилита способна контролировать работу микропроцессора на всех этапах обработки алгоритмов;
- позволяет удалить файлы без возможности на восстановление, которые не использовались продолжительное время;
- регулярно выводит на экран уведомления о состоянии мобильного телефона;
- анализирует работу и состояние аккумуляторной батареи;
- осуществляет быструю деинсталляцию программ и их компонентов;
- при необходимости охлаждает телефон;
- автоматически удаляет одинаковые файлы, оставляя единственный экземпляр.
Популярностью пользуются и другие программы:
- Power Clean — многофункциональная утилита, с помощью которых можно не только удалять мусор, но и охлаждать процессор, стирать устаревшие и неиспользуемые файлы;
- CCleaner — функциональная программа, которая дизайном интерфейса и набором инструментов похожа на Clean Master;
- App Cache Cleaner — дополнение, установка которого позволяет производить очистку файлов автоматически. Также есть возможность переносить информацию на внешний накопитель — SD-карту.
Интерфейс программы-очистки Clean Master
Обратите внимание! На платформе Play Market можно ознакомиться со всем списком программ, большинство из них скачивается бесплатно.
Очищение от мусора через Recovery
От ненужных кэшированных данных можно избавиться на всех марках смартфонов, не имеет значения и версия операционной системы. Основное условие — войти в режим Recovery. Для этого необходимо одновременно зажать определенную комбинацию клавиш. Преимущественно используются клавиши переключения громкости в сторону увеличения и включения.
Как избавиться от мусора с помощью режима Recovery
Как только на экране отобразится меню Recovery, пользователю нужно выбрать режим «Wipe Cache Partition». Навигация осуществляется с помощью клавиш переключения громкости, подтверждают действия кнопкой включения. Вот и все, за несколько кликов на смартфоне с ОС Android будет удален весь мусор.
Удаление кэша одного приложения
Если необходимо удалить мусор с одного конкретного приложения без использования сторонних программ, нужно воспользоваться следующей инструкцией:
- На мобильном устройстве пройти путь: «Настройки» — «Приложения» или «Все».
- Среди списка установленных программ выбрать необходимую и тапнуть на нее.
- Перейти в раздел «Хранилище» и нажать на активную кнопку «Стереть данные» или «Очистить кэш».
Удаление кэша в конкретном приложении
Важно! Название разделов может изменяться в зависимости от марки телефона и версии прошивки.
Выяснив, что такое кэш, уже несложно догадаться, зачем периодически эти данные необходимо очищать. Правильный «уход» за девайсом позволяет оптимизировать его работу, и проблема багов и глюков пользователю будет незнакома. Для начинающих наиболее оптимальным вариантом станет установка программы-очистки, которая эффективно справляется с поставленной задачей и проста в использовании.
Для чего нужно кэширование данных
Определив, что кэш создается самыми разными приложениями на телефоне Андроид, следует понять, зачем вообще нужен промежуточный буфер. Его главная роль – осуществление быстрого доступа к файлам. То есть кэш сокращает время запуска программ и подгрузки данных.
Чтобы роль cache стала еще более понятной, следует рассмотреть принцип его работы на конкретном примере. Допустим, пользователь открывает сайты через браузер. Причем некоторые ресурсы он посещает с завидной регулярностью. Если бы данные не кэшировались, каждый запуск сайта «А» требовал бы условные 5 секунд времени. С cache промежуток сокращается до одной секунды.
Несмотря на очевидную пользу кеша, промежуточный буфер имеет недостаток. Он занимает свободное пространство в памяти смартфона, которое могло бы быть занято полноценными файлами.
По аналогии с браузером работает кэш остальных приложений. Промежуточный буфер сокращает время запуска, делая взаимодействие со смартфоном более плавным.
Можно ли удалить папку cache?
Тут зависит от того что именно внутри. Если там только кэш — удалить можно, но только содержимое, саму папку не нужно удалять.
Если мы имеем ввиду /data/dalvik-cache — то саму папку удалять не стоит, а вот содержимое удалить можно. Пустая все равно не грузит систему никак, она ведь пустая. Важно понимать, что в будущем кэш будет восстановлен.
Чтобы ответить на вопрос удалять или нет, нужно просто выяснить — что именно в папке cache, если там только кэш и никаких других данных нет — значит можно удалять, но только содержимое.
Ну и конечно, идеальнее всего перед вообще любыми изменениями/удалениями в системе — сделать резервную копию Android, то есть бэкап.
Русские Блоги
Предисловие
В предыдущей статье я предлагал всем ознакомиться с процессом выполнения сетевого запроса Volley. Это более четкое представление о Volley. Начиная с этой статьи, мы начали проводить углубленный анализ определенной функции Volley. Полностью освоите различные функции Volley.
Начнем с содержимого кеша, но сегодняшний анализ кеша основан на предыдущем анализе исходного кода.Друзьям, которые не читали предыдущую статью, рекомендуется сначала прочитать ее.Анализ исходного кода Android Volley (1), процесс выполнения сетевых запросов。
Общий дизайн кеша Volley
Прежде чем приступить к подробному анализу, давайте взглянем на устройство кэша Volley.Понимание этого процесса помогает нам понять детали кеша. Volley предоставляет кэш в качестве интерфейса кеширования, инкапсулирует кэшированный объект Entry и некоторые регулярные операции добавления, удаления и проверки.
public interface Cache { Entry get(String key); void put(String key, Entry entry); void initialize(); /** * Неверная запись в кеш */ void invalidate(String key, boolean fullExpire); void remove(String key); void clear(); /** * Пользовательские кешированные объекты */ class Entry { public byte[] data; public String etag; public long serverDate; public long lastModified; public long ttl; public long softTtl; public Map responseHeaders = Collections.emptyMap(); public List allResponseHeaders; / ** Определяем, истек ли срок въезда. * / public boolean isExpired() { return this.ttl < System.currentTimeMillis(); } / ** Определение необходимости обновления записи. * / public boolean refreshNeeded() { return this.softTtl < System.currentTimeMillis(); } } } Скопировать код
Запись в основном содержит исходные данные сетевого ответа, атрибуты, относящиеся к кэш-памяти, и соответствующий заголовок ответа, как сущность кеша. Конкретным классом реализации Cache является DiskBaseCache, который реализует интерфейс Cache и реализует метод ответа. Затем давайте посмотрим на структуру DiskBaseCache. Давайте сначала посмотрим на статический внутренний класс CacheHeader в DiskBaseCache.
static class CacheHeader { long size; final String key; final String etag; final long serverDate; final long lastModified; final long ttl; final long softTtl; final List allResponseHeaders; private CacheHeader(String key, String etag, long serverDate, long lastModified, long ttl, long softTtl, List allResponseHeaders) { this.key = key; this.etag = («».equals(etag)) ? NULL : etag; this.serverDate = serverDate; this.lastModified = lastModified; this.ttl = ttl; this.softTtl = softTtl; this.allResponseHeaders = allResponseHeaders; } CacheHeader(String key, Entry entry) { this(key, entry.etag, entry.serverDate, entry.lastModified, entry.ttl, entry.softTtl, getAllResponseHeaders(entry)); size = entry.data.length; } } Скопировать код
DiskBaseCache очень продуман. Он помещает внутрь статический внутренний класс CacheHeader. Мы можем обнаружить, что этот класс очень похож на Entry of Cache. Кажется ли он немного избыточным? Причина, по которой Volley спроектировал такой способ, в основном предназначена для кеширования. рациональность. Мы знаем, что каждое приложение имеет определенный лимит памяти. Программа занимает слишком много памяти и склонна к OOM (Out of Memory). Если каждый запрос не поврежден, вся информация кэшируется в памяти, поэтому Это очень интенсивно использует память.
Мы можем обнаружить, что самая большая разница между CacheHeader и Entry заключается в том, есть ли атрибут данных byte []. Данные представляют собой метаданные сетевого ответа, который является элементом, занимающим больше всего места в возвращаемом содержимом, поэтому DiskBaseCache повторно абстрагирует элемент, не связанный с данными. CacheHeader и кэшировать его в памяти, а часть данных хранится в дисковом кэше, так что ограниченное пространство памяти может быть использовано в максимальной степени. код показан ниже:
BufferedOutputStream fos = new BufferedOutputStream(createOutputStream(file)); CacheHeader e = new CacheHeader(key, entry); boolean success = e.writeHeader(fos); // записываем entry.data на диск fos.write(entry.data); fos.close(); // Кэшировать Кэш в памяти putEntry(key, e); Скопировать код
Во-вторых, конкретная реализация DiskBaseCache
Прочитав проект кеша Volley, давайте рассмотрим конкретную реализацию DiskBaseCache.
2.1 Инициализировать кеш
// Каталог кеш-памяти private final File mRootDirectory; public DiskBasedCache(File rootDirectory, int maxCacheSizeInBytes) { mRootDirectory = rootDirectory; mMaxCacheSizeInBytes = maxCacheSizeInBytes; } @Override public synchronized void initialize() { // Если mRootDirectroy не существует, создайте его if (!mRootDirectory.exists()) { if (!mRootDirectory.mkdirs()) { VolleyLog.e(«Unable to create cache dir %s», mRootDirectory.getAbsolutePath()); } return; } File[] files = mRootDirectory.listFiles(); if (files == NULL) { return; } // Обойти все файлы в mRootDirectory for (File file : files) { try { long entrySize = file.length(); CountingInputStream cis = new CountingInputStream( new BufferedInputStream(createInputStream(file)), entrySize); // Кешируем соответствующий файл в памяти CacheHeader entry = CacheHeader.readHeader(cis); entry.size = entrySize; putEntry(entry.key, entry); } catch (IOException e) { file.delete(); } } } Скопировать код
Создайте экземпляр DiskBaseCache через переданные извне rootDirectory и maxCacheSizeInBytes. MRootDirectory представляет каталог нашего кэша памяти, а maxCacheSizeInBytes представляет размер дискового кеша. Значение по умолчанию — 5 МБ. Если mRootDirectory имеет значение NULL, создайте его, а затем кэшируйте все файлы в mRootDirectory в памяти.
2.2 Реализация метода put ()
@Override public synchronized void put(String key, Entry entry) { pruneIfNeeded(entry.data.length); File file = getFileForKey(key); try { BufferedOutputStream fos = new BufferedOutputStream(createOutputStream(file)); CacheHeader e = new CacheHeader(key, entry); boolean success = e.writeHeader(fos); fos.write(entry.data); fos.close(); putEntry(key, e); return; } catch (IOException e) { } } private void pruneIfNeeded(int neededSpace) { // Если памяти достаточно, просто вернемся напрямую. if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes) { return; } long before = mTotalSize; int prunedFiles = 0; Iterator> iterator = mEntries.entrySet().iterator(); // Обходим все файлы и начинаем удалять файлы while (iterator.hasNext()) { Map.Entry entry = iterator.next(); CacheHeader e = entry.getValue(); boolean deleted = getFileForKey(e.key).delete(); if (deleted) { mTotalSize -= e.size; } iterator.remove(); prunedFiles++; // Если после удаления файла достаточно места для хранения, останавливаем цикл if ((mTotalSize + neededSpace) < mMaxCacheSizeInBytes * HYSTERESIS_FACTOR) { break; } } } Скопировать код
Видно, что реализация кода Volley завершена. Перед добавлением кеша вызовите метод pruneIfNeed (), чтобы оценить и обработать пространство памяти. Если нет ограничений, использование памяти будет неограниченно увеличиваться и, наконец, достигнет SD-карты. Когда емкость изменяется, возникает исключение, которое не может быть записано (поскольку пространство для хранения заполнено).
Вот еще один момент, который следует добавить. Что касается кеширования, Volley в основном использует алгоритм LRU (Least Recently Used). Алгоритм LRU — это наименее используемый алгоритм. Его основная идея состоит в том, чтобы отдавать приоритет устранению этих наименее недавно использованных кешей, когда кеш заполнен. Объект. Основной принцип алгоритма — сохранить недавно использованные объекты в LinkedHashMap в виде сильной ссылки (то есть метода ссылки на объект, который мы обычно используем), а когда кеш заполнен, удалить из памяти наименее недавно использованные объекты. Об алгоритме LRU вы можете прочитать в этой статье:Тщательный анализ механизма кеширования Android — LruCache。
После оценки объема памяти сохраните entry.data на диске и кэшируйте CacheHeader в памяти, чтобы завершить выполнение метода put () DiskBaseCache.
2.3 Реализация метода get ()
Так как это функция кэширования, должен быть ключ для кэширования.Давайте посмотрим, как генерируется ключ кеширования Volley.
private String getFilenameForKey(String key) { int firstHalfLength = key.length() / 2; String localFilename = String.valueOf(key.substring(0, firstHalfLength).hashCode()); localFilename += String.valueOf(key.substring(firstHalfLength).hashCode()); return localFilename; } Скопировать код
Метод генерации ключа кэширования Volley по-прежнему вызывает большие затруднения: он разделяет URL-адрес сетевого запроса на две половины, а затем соединяет хэш-код этих двух частей в ключ кеширования. Основная причина, по которой Volley хочет это сделать, состоит в том, чтобы избежать дублирования имен файлов, вызванного дублированием hashCode. Вероятность того, что hashCode совпадает с другим URL-адресом в два раза, намного меньше, чем у одного. Однако небольшая вероятность не означает, что его не существует, а Java Расчет hashCode выполняется очень быстро. Это должно быть решение Volley после взвешивания безопасности и эффективности. Эту идею стоит изучить.
@Override public synchronized Entry get(String key) { CacheHeader entry = mEntries.get(key); if (entry == NULL) { return NULL; } File file = getFileForKey(key); try { CountingInputStream cis = new CountingInputStream( new BufferedInputStream(createInputStream(file)), file.length()); try { CacheHeader entryOnDisk = CacheHeader.readHeader(cis); if (!TextUtils.equals(key, entryOnDisk.key)) { // Файл может быть сопоставлен с двумя разными ключами и сохранен в разных записях removeEntry(key); return NULL; } byte[] data = streamToBytes(cis, cis.bytesRemaining()); return entry.toCacheEntry(data); } finally { cis.close(); } } catch (IOException e) { remove(key); return NULL; } } Скопировать код
Как мы уже говорили выше, Volley помещает данные ответа на диск и кеширует CacheHeader в памяти. Метод get () фактически является обратным этому процессу. Во-первых, CacheHeader извлекается из mEntries через ключ. Если он равен нулю, он напрямую Верните NULL, иначе получите данные на диске по ключу и объедините CacheHeader и данные в полную запись по entry.toCacheEntry (data), а затем вернитесь.
В-третьих, использование DiskBaseCache в Volley
После прочтения конкретной реализации DiskBaseCache давайте наконец посмотрим, как DiskBaseCache используется в Volley, чтобы все механизмы кэширования Volley можно было соединить последовательно.
3.1 Построение DiskBaseCache
private static RequestQueue newRequestQueue(Context context, Network network) { File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); queue.start(); return queue; } Скопировать код
Вы должны помнить основные принципы использования Volley.В то время нашим первым шагом было использование Volley.newRequestQueue () для создания RequestQueue, который был отправной точкой всего. Видно, что мы сначала получаем путь кеша через context.getCacheDir (), а затем создаем каталог cacheDir, который нам нужен для кеширования. На самом деле это mRootDirectory в DiskBaseCache, а затем передаем его конструктору DiskBaseCache только с одним параметром, создавая Экземпляр DiskBaseCache, размер кеш-памяти по умолчанию составляет 5 МБ.
private static final int DEFAULT_DISK_USAGE_BYTES = 5 * 1024 * 1024; public DiskBasedCache(File rootDirectory) { this(rootDirectory, DEFAULT_DISK_USAGE_BYTES); } Скопировать код
3.2 Вызов метода initialize ()
public class CacheDispatcher extends Thread { @Override public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); mCache.initialize(); while (true) { try { processRequest(); } catch (InterruptedException e) { } } } } Скопировать код
initialize () вызывается в методе выполнения CacheDispatcher, который является потоком, обрабатывающим запросы в очереди кеша. После создания экземпляра DiskBaseCache в беспроводном цикле while (true) мы ждем поступления запроса, а затем выполняем его.
3.3 вызов метода put ()
public class NetworkDispatcher extends Thread { private void processRequest() throws InterruptedException { Request request = mQueue.take(); try { NetworkResponse networkResponse = mNetwork.performRequest(request); Response response = request.parseNetworkResponse(networkResponse); if (request.shouldCache() && response.cacheEntry != NULL) { mCache.put(request.getCacheKey(), response.cacheEntry); request.addMarker(«network-cache-written»); } } } Скопировать код
Вы можете видеть, что метод put () вызывается в NetworkDispatcher, NetworkDispatcher — это поток, который выполняет сетевые запросы, берет запрос из очереди запросов, а затем выполняет запрос. Если запрос необходимо кэшировать (по умолчанию он должен быть кэширован) ) И cacheEntry ответа не является нулевым, вызовите метод put () DiskBaseCache для кеширования Entry.
3.4 вызов метода get ()
public class CacheDispatcher extends Thread { @Override public void run() { mCache.initialize(); while (true) { try { processRequest(); } catch (InterruptedException e) { } } } private void processRequest() throws InterruptedException { final Request request = mCacheQueue.take(); // вызываем метод get () для получения Entry Cache.Entry entry = mCache.get(request.getCacheKey()); if (entry.isExpired()) { request.setCacheEntry(entry); mNetworkQueue.put(request); return; } Response response = request.parseNetworkResponse( new NetworkResponse(entry.data, entry.responseHeaders)); if (!entry.refreshNeeded()) { mDelivery.postResponse(request, response); } } Скопировать код
Мы упоминали выше, что метод initialize () DiskBaseCache вызывается в методе run () в CacheDispatcher. Фактически, метод get () тот же. Он бесконечно зацикливается на while (true). Когда приходит запрос, он сначала Запрошенный URL-адрес извлекает соответствующую запись, кэшированную в памяти, затем выполняет определенную оценку и обработку записи и, наконец, преобразует ее в обратный вызов ответа.
резюме
При вызове метода Volley.newRequestQueue () для получения RequestQueue, создания экземпляра DiskBaseCache, вызова метода initialize () DiskBaseCache в методе run () CacheDispatcher для инициализации DiskBaseCache и в методе run () NetworkDispatcher, когда запрос выполняется, Вызовите метод put () DiskBaseCache, чтобы кэшировать его в памяти, а затем вызовите метод get () DiskBaseCache, чтобы создать соответствующий ответ, когда запрос выполняется в методе run () CaheDispatcher, и, наконец, его распространить.
Когда удалять кэш
Данные кэша в телефоне можно и нужно удалять, желательно 1-2 раза в месяц
Многие и вовсе не проводят чистку собственного телефона, ведь кэшированные данные созданы для того, чтобы ускорить загрузку программ, сайтов. Но, если памяти на смартфоне не так много, со временем будут заметны недостатки кэша – он будет переполняться ненужными данными, занимающими львиную долю свободного места.
Пользуясь новым телефоном, на котором еще не стоит куча программ, замедления работы системы не беспокоят. Но, уже спустя пару месяцев активного пользования, смартфон на Андроиде начинает существенно подтормаживать. Дело в том, что в кэш сохраняются фотографии, видео, музыка и когда память переполняется, вместе с нехваткой свободного места появляются и тормоза.
Данные кэша в телефоне можно и нужно удалять, желательно 1 – 2 раза в месяц. Это освободит память устройства и снизит вероятность появления системных ошибок.
Сигналом к очистке послужит то, что некоторые программы перестали нормально функционировать, например, в них происходят сбои, «вылеты».