Лучшая практика при кэшировании файлов в Android

У меня в данный момент есть файлы кэширования изображений моего приложения в подкаталоге кеша для приложения. Изображения используются в ListView и хранятся в HashMap из SoftReferences - растровых изображений .

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

Вещи, которые меня беспокоят:

Я знаю, что пользователь может очистить кеш и что это делается автоматически, когда на внутренней памяти недостаточно места, но я чувствую, что большинство пользователей увидят приложение объемом несколько МБ и удалят его. Кроме того, если пространство постоянно мало, мое приложение будет просто загружать изображения, делая его медленнее.

На большинстве устройств предварительно установлена ​​SD-карта, но что мне делать, если она не вставлена? SD-карта также может работать медленнее, чем внутренняя память, что влияет на производительность моего приложения.

Стоит ли включать опцию выбора местоположения кеша?

Стоит ли пытаться управлять размером кеша (будь то в / cache или / sdcard) или просто забыть об этом?

Спасибо Вы потратили свое время (я знаю, это очень долго) и, пожалуйста, опубликуйте любой соответствующий опыт.

18
задан skaffman 12 January 2011 в 12:04
поделиться

2 ответа

Я не могу предложить вам исчерпывающий набор рекомендаций, но могу предложить то, что я узнал на данный момент:

Управление кешем — хорошая идея. Кэш моего приложения таков, что я знаю, что мне никогда не понадобится больше, чем определенное количество кэшированных файлов, поэтому всякий раз, когда я вставляю новый файл в кеш, я удаляю самые старые файлы, пока не достигну предела, который я установил. Вы можете сделать что-то подобное в зависимости от размера или просто возраста.

Кэширование на SD-карту, если оно доступно, является хорошей идеей, если ваш кеш должен занимать много места. Вам нужно будет так же тщательно управлять этим пространством, поскольку оно не будет автоматически очищать это пространство для вас. Если вы кэшируете файлы изображений, обязательно поместите их в каталог, начинающийся с точки, например «/yourAppHere/.cache». Это предотвратит отображение изображений в галерее, что очень раздражает.

Позволить пользователю выбирать расположение тайника кажется мне излишеством, но если ваша аудитория очень фанатична, это может быть оценено по достоинству.

Я не заметил особых проблем при кэшировании на SD-карту, но я не знаю, как ваше приложение использует эту информацию.

15
ответ дан 30 November 2019 в 09:11
поделиться

У всех есть хорошие идеи. Мне нравится идея использования SoftReference , хотя я не уверен, как часто они очищаются, поскольку это сильно различается от ВМ к ВМ. Возможно, вы захотите объединить это с обычным HashMap , чтобы предотвратить очистку всего кеша каждые несколько минут.

EclipseLink имеет несколько различных реализаций кэша и довольно хорошую документацию по ним . Вероятно, вы могли бы воспользоваться некоторыми идеями из реализации (например, LRU, MRU и т. Д.). например,

  • жесткий кеш
  • мягкий кеш
  • комбинированный жесткий / программный кеш

Поскольку вы настраиваете кеш до мельчайших деталей, я бы рекомендовал настроить его для различных устройств на основе жестких спецификаций . Обычно это плохой дизайн, но объем оборудования, на котором работает ваше программное обеспечение, требует этого, ИМХО. например,

  • Определить объем доступной памяти на SD-карте.Большинство новых смартфонов поставляются с SD-картами емкостью несколько ГБ, и их довольно сложно заполнить при регулярном использовании для большинства пользователей. Используйте прочь! Вы также можете определить объем свободного места на SD-карте при запуске и увеличить / уменьшить размер кеш-памяти при запуске.
  • Определите объем доступной памяти и сконфигурируйте кеши с учетом этого. Если пользователь использует приложение, интенсивно использующее оборудование, я не думаю, что они будут возражать, если оно составляет 200 МБ ОЗУ и обеспечивает очень быстрое взаимодействие с пользователем, особенно с учетом того, что они потратили много денег на то, чтобы иметь телефон с 1 -2 ГБ оперативной памяти.

Удачи!

2
ответ дан 30 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: