android - ¿Qué es LazyList?
(4)
No puedo encontrar en ninguna fuente realmente creíble que explique qué es LazyList. ¿Nadie?
AFAIK, le explicaré con el ejemplo. Si la lista contiene muchas imágenes con texto, su lista tardará un poco en cargarse porque necesita descargar imágenes y rellenarlas en la lista. Supongamos que si su lista contiene 100 imágenes Tomará mucho tiempo descargar cada imagen y mostrarle el elemento de la lista. Hacer que el usuario espere hasta que se carguen las imágenes no es fácil de usar. así que lo que tenemos que hacer. En este punto del tiempo, la lista perezosa entra en escena. Es la idea que permite que las imágenes se carguen en segundo plano y muestren el texto mientras.
Todo el mundo sabe que listview recicla sus vistas para cada vista. es decir, si su vista de lista contiene 40 elementos, entonces la vista de lista no asignará memoria para 40 elementos, sino que asignará memoria para los elementos visibles, es decir, puede ver solo 10 elementos a la vez. por lo que listview asignará 10 elementos de memoria.
Entonces, cuando se desplace por la vista, la vista se actualizará. Debido a esto, perderá su referencia a las imágenes y deberá descargarlas nuevamente. para evitar eso, el almacenamiento en caché entra en escena.
Este ejemplo se basa en mi conocimiento en vista de lista, no estoy diciendo que esto solo sea correcto. Puede que haya un error en la respuesta, si alguien se encuentra con confianza, no dude en informarme.
Creo que esto es al revés. AFAIK, Lazy Loading es la definición, donde en realidad solo carga los datos cuando los necesita, y es una buena práctica de diseño.
Así que creo que lo mismo se aplica a esto, solo que esta vez se refiere a la vista de lista.
Si estoy equivocado, por favor corrígeme.
El mejor ejemplo de lista perezosa es notificaciones de Facebook, mensajes, solicitudes. cuando se desplaza entonces se cargarán los datos.
La Lista lenta es la carga lenta de imágenes desde una tarjeta SD o desde un servidor que utiliza URL. Es como cargar imágenes bajo demanda.
Las imágenes se pueden almacenar en la memoria caché local o en la memoria del teléfono. Url es considerada la clave. Si la clave está presente en la tarjeta SD, muestre las imágenes de la tarjeta SD o, si no, la imagen se descarga desde el servidor y la memoria caché a la ubicación que elija. El límite de caché puede establecer. También puede elegir su propia ubicación para almacenar imágenes en caché. El caché también se puede borrar.
En lugar de que el usuario espere a descargar imágenes grandes y luego muestre una lista lenta, carga las imágenes a pedido. Dado que las imágenes se almacenan en caché, puede mostrar imágenes sin conexión.
https://github.com/thest1/LazyList . Lista de espera
En tu vista
imageLoader.DisplayImage(imageurl, imageview);
Método de visualización de 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);
}
}
Una alternativa a Lazy List es Universal Image Loader.
https://github.com/nostra13/Android-Universal-Image-Loader . Se basa en Lazy List (funciona en el mismo principio). Pero tiene muchas otras configuraciones. Preferiría usar **** Universal Image Loader **** porque le ofrece más opciones de configuración. Puede mostrar una imagen de error si falla la descarga. Puede mostrar imágenes con esquinas redondeadas. Se puede almacenar en caché en disco o memoria. Puede comprimir la imagen.
En tu constructor adaptador personalizado
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();
En tu getView ()
ImageView image=(ImageView)vi.findViewById(R.id.imageview);
imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options
Puede configurarlo con otras opciones para satisfacer sus necesidades.
Junto con la carga diferida / Cargador de imagen universal, puede ver el soporte para un desplazamiento y un rendimiento sin problemas. http://developer.android.com/training/improving-layouts/smooth-scrolling.html .