Я не могу найти ни одного действительно достоверного источника, объясняющего, что такое LazyList. Кто-нибудь?
Что такое LazyList?
Ответ 1
Lazy List - это ленивая загрузка изображений с SD-карты или с сервера с использованием URL-адресов. Это по заказу загружает изображения.
Изображения можно кэшировать на локальную память sd-card или phone. Url считается ключевым. Если ключ присутствует на SD-карте, отображать изображения с SD-карты, другие отображают изображение, загружая с сервера и кешируют то же самое в выбранное вами местоположение. Предел кеша может быть установлен. Вы также можете выбрать свое местоположение для кэширования изображений. Кэш также можно очистить.
Вместо того, чтобы ждать загрузки больших изображений и отображения ленивого списка, загружает изображения по требованию. Поскольку изображения кэшируются, вы можете отображать изображения в автономном режиме.
https://github.com/thest1/LazyList. Lazy List
В вашем 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);
}
}
Альтернативой Lazy List является универсальный загрузчик изображений
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
Вы можете настроить другие параметры в соответствии с вашими потребностями.
Наряду с ленивой загрузкой /Universal Image Loader вы можете просматривать держатель для плавной прокрутки и производительности. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.
Ответ 2
AFAIK, я объясню вам пример Если в списке содержится много изображений с текстом, загрузка вашего списка займет некоторое время, потому что вам нужно загрузить изображения, и вам нужно заполнить их в списке. Предположим, что ваш список содержит 100 изображений. Для загрузки каждого изображения потребуется много времени, чтобы отобразить его в списке. Чтобы пользователь мог дождаться загрузки изображений, он не является удобным для пользователя. так что нам нужно делать. В этот момент ленивый список вступает в картину. Идея состоит в том, чтобы позволить загружать изображения в фоновом режиме и показывать текст в то время как.
Все знают, что listview перерабатывает свои представления для каждого представления. Если ваш список содержит 40 элементов, то listview не будет выделять память для 40 элементов, вместо этого он выделяет память для видимых элементов, т.е. вы можете видеть только 10 элементов за раз. поэтому listview будет выделять 10 элементов meemory.
Итак, когда вы прокручиваете представление, просмотр будет обновляться. из-за того, что вы потеряете свою ссылку на изображения, и вам нужно загрузить их. во избежание этого, кэширование приходит в картину.
Этот пример основан на моих знаниях в listview, я не говорю, что это правильно. В ответе может быть не так, если любое тело не стесняется сообщить мне.
Ответ 3
Я думаю, что это наоборот. AFAIK, Lazy Loading - это определение, в котором вы действительно загружаете данные только тогда, когда вам это нужно, и это хорошая практика проектирования.
Итак, я считаю, что для этого применимо то же самое, только на этот раз это относится к представлению списка.
Если я ошибаюсь, пожалуйста, поправьте меня.
Ответ 4
Лучшим примером ленивого списка являются уведомления, сообщения, запросы в facebook. когда вы прокручиваете, тогда данные будут загружаться.