2013-03-25 2 views
19

Я не могу найти ни в одном действительно надежном источнике, объясняющем, что такое LazyList. Кто угодно?Что такое LazyList?

ответ

37

Lazy List - это ленивая загрузка изображений с SD-карты или с сервера с использованием URL-адресов. Это по заказу загружает изображения.

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

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

https://github.com/thest1/LazyList. Ленивый Список

В вашем GetView

imageLoader.DisplayImage(imageurl, imageview); 

метод ImageLoader Дисплей

public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters 
    { 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); //get image from cache using url as key 
    if(bitmap!=null)   //if image exists 
     imageView.setImageBitmap(bitmap); //dispaly iamge 
    else //downlaod image and dispaly. add to cache. 
    { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(stub_id); 
    } 
    } 

Альтернативой Список Ленивый является Универсальный Image Loader

https://github.com/nostra13/Android-Universal-Image-Loader. Он основан на Lazy List (работает по тому же принципу). Но у него много других конфигураций.Я бы предпочел использовать **** Universal Image Loader ****, потому что он дает вам больше возможностей настройки. Вы можете отобразить изображение ошибки, если downlaod не удалось. Может отображать изображения с закругленными углами. Может кэшировать диск или память. Может сжимать изображение.

В пользовательском адаптере конструктор

File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder"); 

// Get singletone instance of ImageLoader 
imageLoader = ImageLoader.getInstance(); 
// Create configuration for ImageLoader (all options are optional) 
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a) 
      // You can pass your own memory cache implementation 
     .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation 
     .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) 
     .enableLogging() 
     .build(); 
// Initialize ImageLoader with created configuration. Do it once. 
imageLoader.init(config); 
options = new DisplayImageOptions.Builder() 
.showStubImage(R.drawable.stub_id)//display stub image 
.cacheInMemory() 
.cacheOnDisc() 
.displayer(new RoundedBitmapDisplayer(20)) 
.build(); 

В вашем GetView()

ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
    imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options 

Вы можете настроить другие параметры в соответствии с вашими потребностями.

Наряду с ленивой загрузкой/универсальным загрузчиком изображений вы можете просматривать держатель для плавной прокрутки и производительности. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.

+0

Привет, рагу, я не могу получить изображения из локального uri, вы можете помочь, пожалуйста, http: //stackoverflow.com/questions/20109034/lazy-list-fetching-images-from-sdcard-local-url –

+0

great объяснение, так что ленивый список похож на picasso или glide? – Fshamri

+1

@ user2198400 - это библиотеки кэширования изображений. Да, они помогают в ленивой загрузке. Также читайте о механизме рециркуляции listview. – Raghunandan

5

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

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

Если я ошибаюсь, пожалуйста, исправьте меня.

2

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

9

AFAIK, я объясню вам на примере Если в списке содержится много изображений с текстом, загрузка вашего списка займет некоторое время, потому что вам нужно загрузить изображения, и вам нужно заполнить их в списке , Предположим, что ваш список содержит 100 изображений. Для загрузки каждого изображения потребуется много времени, чтобы отобразить его в списке. Чтобы пользователь мог дождаться загрузки изображений, он не является удобным для пользователя. Так что нам нужно делать. В этот момент ленивый список вступает в картину. Идея состоит в том, чтобы позволить загружать изображения в фоновом режиме и показывать текст в то время как.

Все знают, что listview перерабатывает свои представления для каждого вида. Если ваш список содержит 40 элементов, то listview не будет выделять память для 40 элементов, вместо этого он выделяет память для видимых элементов, т. е. вы можете видеть только 10 элементов за раз. поэтому listview будет выделять 10 элементов meemory.

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

Этот пример основан на моих знаниях в списке, я не говорю, что это правильно. В ответ может быть неправильное, если какое-либо тело не стесняется сообщать мне.