Я создаю приложение "Галерея изображений", которое будет получать около 50-60 изображений HD с сайта. Сайт будет обновлять список изображений три раза в неделю, и поэтому в следующий раз придется загружать новые изображения и удалять старые изображения, когда приложение будет запущено.
Какой лучший способ кешировать эти изображения и ленить загружать их без запуска в проблемы OutOfMemory и SoftReference? Ленивая загрузка будет необходима, потому что каждая миниатюра изображения имеет заголовок и замораживание пользовательского интерфейса эскиза до загрузки изображения не является хорошей идеей.
Кроме того, для ленивых загрузочных изображений - действительно ли это хорошая конструкция, чтобы создать поток для каждого эскиза и реализовать очередь для обработки потоков? Есть ли более простой способ?
Пожалуйста, помогите!
Спасибо за чтение!
Вы можете получить добычу в PicHelper из источника Zwitscher для класса, который выполняет выборку и сохранение в локальной файловой системе, так как а также чтение растровых изображений из этих файлов.
В главном коде вы должны запустить AsyncTask
для извлечения изображений (в методе doInBackground()
. Чтобы предотвратить OOME, я бы поместил список изображений в "очередь" и вытащил их в последовательном порядке, а не параллельно. Многие телефоны имеют только 48 Мбайт кучи или меньше.
Как вопрос общий, так и моя попытка помочь вам. Некоторые идеи: - загружать изображения в одну отдельную нить - либо хранить их как файлы с именами на SD-карте, либо... загружать их каждый раз, когда приложение запускается! - поместите их в GridView. Вы можете использовать обработчик сообщений (сообщения из потока в основной поток пользовательского интерфейса) для обновления GridView - если вы решили сохранить изображения на телефоне, укажите их либо по именам файлов, либо сохраните имена в локальной базе данных.
На самом деле я внедрил GridView для чтения изображений на SD-карте и ленивые загрузки изображений для списка, а не то, что вы пытаетесь сделать, но это определенно выполнимо, и вы, вероятно, можете найти какой-то код в сети.