Android кэш> внутреннее хранилище против объектного кэша - PullRequest
6 голосов
/ 01 сентября 2011

Мне нужно кэшировать изображения (только 5 или до 100) из Интернета и отображать в виде списка.если пользователь выбирает строку списка, кеш можно очистить.Я посмотрел на несколько примеров.некоторые используют внешнее хранилище.некоторые используют внутренний и внешний.некоторые объекты ..

Итак, каковы преимущества / недостатки внутреннего хранилища (http://developer.android.com/guide/topics/data/data-storage.html#filesInternal через getCacheDir ()) и кеша объектов (что-то вроде WeakHashMap или HashMap )?

проблема с программными ссылками заключается в том, что они могут быть слишком быстро скопированы ( SoftReference собирает мусор слишком рано ).как насчет внутренней памяти андроида?Ссылка говорит: «Эти файлы будут удалены первыми, когда устройству не хватит места для хранения.».

Имеет ли какое-либо значение использование кэша объектов или временного внутреннего хранилища?кроме кеша объектов должен быть чуть быстрее

Ответы [ 2 ]

10 голосов
/ 02 сентября 2011

Вот несколько различий между ними:

  • Кеш объекта быстрее, чем внутреннее хранилище, но имеет меньшую емкость.
  • Кэш объектов носит временный характер, в то время как внутреннее хранилище имеет более длительный срок службы
  • Кэш объектов занимает фактическое пространство в куче.Внутренняя память неЭто важный момент, так как слишком большой кэш вашего объекта может вызвать исключение OutOfMemoryException даже с SoftReference

Теперь, учитывая эти различия, они не являются полностью взаимоисключающими.Многое из того, что мы реализовали, использует многослойное кэширование, особенно связанное с загрузкой изображений.Вот шаги, которые мы используем:

  • Если изображение не было кэшировано, извлеките его из URL и кэшируйте его в кеше первого уровня, который представляет собой SoftReference / WeakHashMap или даже жесткий кеш с ограниченным размеромиспользуя LinkedHashMap
  • Затем мы реализуем метод removeEldestEntry () в LinkedHashMap.При достижении емкости жесткого кеша мы перемещаем вещи во вторичный кеш, который является внутренним хранилищем.Используя этот метод, вам не нужно повторно извлекать изображение из URL-адреса + оно все равно будет быстрее и освободит вашу память
  • Мы своевременно провели очистку на фоне внутреннего хранилища с использованием алгоритма LRU,Вы не должны полагаться на Android, чтобы очистить это для вас.

Мы сделали многоуровневое кэширование общим компонентом и использовали его во многих наших проектах для наших клиентов.Эта техника в значительной степени соответствует тому, что кэш L1, L2 в компьютерной архитектуре.

0 голосов
/ 02 сентября 2011

Вам следует поискать вопрос "Как мне лениво загружать изображения в ListView" и связанные с ним.

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