Как кэшировать и хранить объекты и установить политику истечения срока действия в Android? - PullRequest
4 голосов
/ 03 мая 2010

У меня есть приложение, извлекающее данные из Интернета, для повышения производительности и пропускной способности, мне нужно реализовать слой кэша.

Из Интернета поступают две разные данные: одна меняется каждый час, а другая в основном не меняется. Поэтому для данных первого типа мне нужно реализовать политику истечения срока действия, чтобы они самостоятельно удалялись после того, как они были созданы в течение 1 часа, и когда пользователь запрашивает эти данные, я сначала проверю хранилище, а затем зайду в Интернет, если ничего не найдено. 1003 *

Я думал об использовании SharedPrefrence или SQLDatabase для хранения данных json или строки сериализованного объекта.

Мой вопрос:

1) Что я должен использовать, SharedPrefrence или SQLDatabase или что-то еще, часть данных не велика, но может быть много экземпляров этих данных.

2) Как реализовать эту систему с истекшим сроком действия.

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

Я бы использовал SQLite для хранения + иметь подкласс last invalidated timestamp в Application.
Он будет сравниваться с System.currentTimeMillis() при каждом вызове доступа к данным, чтобы решить, следует ли выбирать новый набор. Для этого есть тонкий прокси-слой.

0 голосов
/ 03 мая 2010

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

Таким образом, вам необходимо сохранить данные и дату для каждого элемента.SharedPreferences должно быть достаточно, если данные представляют собой строку средней длины, а общее количество составляет менее нескольких килобайт.Если существует известная верхняя граница длины данных, используйте базу данных, в противном случае вы можете использовать простые файлы.SharedPreferences записывает XML-файл каждый раз, когда вы фиксируете.

Вы можете создать поток с большим интервалом ожидания, чтобы выполнять периодические проверки, или создать обработчик и использовать postDelayed или аналогичный для создания проверочного потока.Проверяйте пункты так часто, как ваш максимум для устаревших данных.Если вы проверяете каждые 10 минут, вы допускаете до 10 минут старых данных, в среднем вдвое меньше.Проверка при запуске заставит вещи появляться в большинстве случаев в любом случае в актуальном состоянии.

Если срок действия всех элементов истекает сразу, вам нужно только проверить дату одного элемента, чтобы знать, что все они должны быть обновлены.Если нет, вы можете попробовать использовать условный GET вместо проверки заголовка каждого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...