Я думаю о том, как в идеале реализовать слой кэша в моем приложении для Android.
В настоящее время у меня есть общие действия, которые отображают данные, поступающие с удаленного сервера. Данные представлены DTO TemplateInstance . Каждый TemplateInstance содержит карту с Components , и каждый из компонентов может иметь дочерние компоненты. Сами компоненты могут быть Text (String), Image (ByteArray) или Time (или любым другим путем подклассификации Component).
В настоящее время мое приложение загружает TemplateInstance с сервера при каждом запуске Activity.
Теперь я хотел бы внедрить в приложение слой кэша , чтобы
- время отображения данных сокращено до минимума,
- данные обновляются при их изменении на сервере.
Моя стратегия для этого выглядит следующим образом:
- Запущенное действие загружает TemplateInstance из локального хранилища по идентификатору (если существует)
- UpdateService проверяет в фоновом режиме, изменился ли TemplateInstance на сервере (используя поле версии в базе данных)
- Если версия сервера больше, чем локальная, или нет локального TemplateInstance, тогда получите данные с сервера, обновите локальное хранилище и обновите представление
Я уже успешно реализовал это с db4o . Есть только две проблемы с этим решением:
- db4o находится под GPL (я не могу его использовать)
- db4o работает очень медленно, когда я загружаю TemplateInstances, которые имеют много изображений (4 секунды для запроса)
Сейчас я ищу лучшую замену для db4o. Мои идеи об этом до сих пор:
- SQLite не подходит из-за структуры данных
- Мне не нужна функциональность базы данных - достаточно будет получить объекты по идентификатору
- Удержание объектов в памяти будет значительно быстрее
- Состояние памяти должно быть сохранено на диск при выходе из приложения, чтобы объекты могли быть восстановлены при запуске
Как вы думаете, что является лучшим решением для этого?
Мои исследования привели меня к EHCache и JCS , которые я никогда не использовал. Как вы думаете, они уместны, также в отношении ресурсов на телефоне Android? Или у вас есть другие предложения?