О том, где хранить:
Ответ зависит от того, что загружается и сколько. Тогда вы делаете выбор.
Например: если вы загружаете что-то временное, меньшее по количеству (меньше удаленных выборок) и по размеру (меньше памяти) и локальное для Activity, то вам следует рассмотреть возможность хранения изображений в памяти с помощью SoftReferences. SoftReferences может привести к повторным запросам, но поскольку количество элементов невелико, оно должно быть доступным.
Однако, если количество загружаемых элементов превышает определенный порог (то есть больше выборок и памяти), вам следует рассмотреть возможность сокращения выборок, а также потребления оперативной памяти путем их кэширования. Здесь вы можете выбрать сохранение их на SD-карте или во временном хранилище (каталоги кэша, локальные для приложения). Для элементов, которые являются небольшими и имеют значение только в контексте приложения (например, эскизы), пользователь в основном не будет использовать его вне вашего приложения. Таким образом, вы можете хранить такие вещи в каталоге кеша. Лучшая часть их использования заключается в том, что вам не нужно убирать беспорядок. Это обрабатывается автоматически. Это может привести к повторной загрузке.
Однако, если загруженные элементы имеют большой размер и могут стоять отдельно от контекста приложения, такого как изображения, видео, аудиоклипы, тогда SDcard должен быть вашим выбором.
Вы также должны прочитать: Обработка больших растровых изображений, чтобы избежать ошибки OOM во время BitmapFactory.decodeStream (..)
Обратите внимание, что вы также можете проверить, может ли здесь помочь использование базы данных. См.
Некоторые соображения при ленивой загрузке элементов в ListView:
Вы должны выполнить загрузку в фоновом режиме, а не блокировать поток пользовательского интерфейса. Следует рассмотреть возможность показа временного изображения во время загрузки элемента. Это очевидно во многих нативных приложениях. Пример реализации отложенной загрузки см. В этом .
Кроме того, для больших списков вы можете реализовать шаблон SlowAdapter (проверьте демонстрацию API).
Он в основном останавливается при прокрутке списка.
Примеры проектов, которые могут вам помочь:
В проекте Romain Guy's Shelves используется два уровня кэширования, в которых он использует кэш в памяти (HashMap, содержащий SoftReferences) и хранилище на SDCard. Просмотреть исходный код здесь
Есть также несколько библиотек с открытым исходным кодом, которые написал Марк Мерфи (CWAC) и DroidFu, которые могут помочь здесь.
Удачи!