Ленивая загрузка изображений очень медленно в LIstView

Я реализовал отложенную загрузку изображений (с удаленного сервера) в своем приложении (приложение типа твиттера), и часть извлечения и загрузки изображения в точный imageView работает отлично. Но часть "getView" адаптера вызывается только после того, как я прокручиваю ListView, и поэтому изображения выбираются с удаленного сервера (я выбираю изображения, выполняя asyntask внутри кода "getView" адаптера) только после того, как прокручиваю вниз и могу увидеть значительную задержку в загрузке изображений. После того как изображения загружены и сохранены в кэш-памяти, при прокрутке вверх или вниз проблем не возникает. Единственная проблема - медленная загрузка изображений при первой загрузке.

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

ТИА

3 ответа

Если вы вызываете свой веб-сервис в методе getView(), он будет вызываться каждый раз при прокрутке вверх и вниз. Так как метод getView вызывается для строк, которые видны на экране.

Что вы можете сделать, это загрузить изображения в HashMap<int, Object>где int == позиция в списке, а object - изображение. В getview вы можете проверить, были ли загружены позиции + (1 -> 10), и, если нет, извлечь их из веб-сервиса в какой-то фоновой задаче. Загрузите изображения в hashmap и заставьте метод getView() использовать эти изображения. Не изображения, полученные непосредственно из веб-службы. В противном случае вам действительно придется ждать их извлечения. Также таким образом вы кэшируете изображения в хэш-карте вместо того, чтобы многократно извлекать одни и те же изображения при прокрутке вверх и вниз.

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

Существует библиотека под названием AALP, которую вы можете использовать, чтобы помочь вам с отложенной загрузкой представлений списка. https://bitbucket.org/zedvoid/aalp/src Это может сэкономить вам время и усилия, надеюсь.

Итак, ваш подход неверен, вы должны получить все изображения, прежде чем показывать их как вызов get, который вызывается каждый раз, когда вы прокручиваете список, поэтому каждый раз, когда ваша служба вызывается и получает нет. изображений, которые список может отображать на экране (скажем, 4-5 за один раз).

Что вам нужно сделать, это:- 1) Получить все изображения. 2) Когда вы выбираете все изображения, установите адаптер на просмотр списка, и у вас будут все изображения в вашем списке без каких-либо задержек, так как вы уже загрузили изображения,

Но это не ленивая загрузка - ленивая загрузка означает, что пользователь должен видеть только часть изображений за раз, если он не прокручивает, нет смысла загружать изображения из сервиса.

Надеюсь, что это будет полезно

Другие вопросы по тегам