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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи!

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

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

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

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

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

Intereting Posts
Динамический просмотр списка – шаблон проектирования Kotlin, когда с несколькими значениями не работает, когда значение представляет собой вид android Android WebView удаляет файлы cookie из определенного домена MenuItem tinting на панели инструментов AppCompat Ошибка при запуске Android Studio 2.1 Является ли dp таким же, как dip? Отражение Java для частного статического метода с параметрами Android Searchview OnQueryTextListener с неработающей базой данных Android: копирование / дублирование SharedPreferences Есть ли более быстрый способ перебора строк из запроса Sqlite? Eclipse / Android не может генерировать R-файлы для любого проекта Приложение убито во время выполнения onPause (). Любые советы о том, как обращаться с таким случаем? Shared Toast не отображается в Android 3.0.1 на Motorola Xoom Изменение настройки яркости экрана на экране Android Android PreferenceActivity для создания предпочтений MODE_WORLD_WRITEABLE в приложениях