Подтвердить что ты не робот

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

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

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

Вещи, которые меня волнуют:

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

Удачи!

Ответ 3

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

IMO: Нет, пусть максимально упростится (за исключением того, что вы можете включить предварительную настройку для опытного пользователя)

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

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

Использовать третью библиотеку. IMO, использующая 3-ей библиотеку как Picasso, лучше, она обрабатывает кеш автоматически по заказу: кэш памяти → кэш диска → сеть