ListView MUY lento cuando se cargan imágenes (con Universal Image Loader)

Mi listView se ejecuta muy suave con sólo texto – pero tan pronto como intento cargar en miniaturas (incluso de caché), se ejecuta SOO intermitente.

Estoy utilizando el script Universal Image Loader

El código en mi ArticleEntryAdapter en public View getView(...) method:

 /** * PHOTOS */ ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.mContext) .enableLogging() .memoryCacheSize(41943040) .discCacheSize(104857600) .threadPoolSize(10) .build(); DisplayImageOptions imgDisplayOptions = new DisplayImageOptions.Builder() //.showStubImage(R.drawable.stub_image) .cacheInMemory() .cacheOnDisc() //.imageScaleType(ImageScaleType.EXACT) .build(); ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.init(config); //loads image (or hides image area) imageLoader.displayImage("", viewHolder.thumbView); //clears previous one if(article.photopath != null && article.photopath.length() != 0) { imageLoader.displayImage( "http://img.mysite.com/processes/resize_android.php?image=" + article.photopath + "&size=150&quality=80", viewHolder.thumbView, imgDisplayOptions ); viewHolder.thumbView.setVisibility(View.VISIBLE); } else { viewHolder.thumbView.setVisibility(View.GONE); //hide image viewHolder.thumbView.invalidate(); //should call after changing to GONE } 

Logcat muestra que está cargando las imágenes de caché (creo):

 ImageLoader Load image from memory cache [http://img.mysite.com/processes/... 

Lo estoy probando en mi Samsung Galaxy Nexus y con Android 4.0.4 (aunque mi minSdkVersion = "8")

2 Solutions collect form web for “ListView MUY lento cuando se cargan imágenes (con Universal Image Loader)”

Ponga la instancia de ImageLoaderConfiguration config, DisplayImageOptions imgDisplayOptions, ImageLoader imageLoader fuera de su método getView como campos privados / miembros de su clase Adapter. Sólo debes crear estas cosas una vez, no cada vez que getView se llama.

Editar: sin ver toda la clase Adaptador, aquí una puñalada en lo que estoy diciendo. Espero que esté cerca de lo que tienes y puedes hacer que funcione. Dejame saber de cualquier manera.

 public class MyAdapterClass extends BaseAdapter { /** * PHOTOS */ static ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.mContext) .enableLogging() .memoryCacheSize(41943040) .discCacheSize(104857600) .threadPoolSize(10) .build(); static DisplayImageOptions imgDisplayOptions = new DisplayImageOptions.Builder() //.showStubImage(R.drawable.stub_image) .cacheInMemory() .cacheOnDisc() //.imageScaleType(ImageScaleType.EXACT) .build(); static ImageLoader imageLoader = ImageLoader.getInstance(); /** * */ public MyAdapterClass() { // TODO Auto-generated constructor stub imageLoader.init(config); } /* (non-Javadoc) * @see android.widget.Adapter#getCount() */ public int getCount() { // TODO Auto-generated method stub return 0; } /* (non-Javadoc) * @see android.widget.Adapter#getItem(int) */ public Object getItem(int position) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see android.widget.Adapter#getItemId(int) */ public long getItemId(int position) { // TODO Auto-generated method stub return 0; } /* (non-Javadoc) * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) */ public View getView(int position, View convertView, ViewGroup parent) { //loads image (or hides image area) imageLoader.displayImage("", viewHolder.thumbView); //clears previous one if(article.photopath != null && article.photopath.length() != 0) { imageLoader.displayImage( "http://img.mysite.com/processes/resize_android.php?image=" + article.photopath + "&size=150&quality=80", viewHolder.thumbView, imgDisplayOptions ); viewHolder.thumbView.setVisibility(View.VISIBLE); } else { viewHolder.thumbView.setVisibility(View.GONE); //hide image viewHolder.thumbView.invalidate(); //should call after changing to GONE } } } 

Podría estar equivocado, pero cuando me enfrenté a este problema, observé que el uso de imágenes de tamaños más pequeños aumentaba la velocidad inmensamente. Anteriormente estaba usando imágenes en más de 150KBs, los cambié a unos 10 un pedazo y funcionó perfectamente bien. Sólo añadir a la anterior tren de pensamiento, podría ser útil para optimizar más adelante.

  • Métodos estáticos o Singletons rendimiento-sabio (Android)?
  • Cuenta de simulacro en ActivityInstrumentationTestCase2
  • Anulación de variables de Fragmento on onDestroy ()
  • ¿Por qué el emulador de Android es tan lento? ¿Cómo podemos acelerar el emulador de Android?
  • ¿Cómo obtener el contexto en el caso de prueba uiautomator?
  • PercentRelativeLayout es más performante?
  • ¿Robotium es confiable para probar cuán rápido comienzan las actividades y fragmentos?
  • Problema "La prueba del repositorio tiene un error" al intentar importar el proyecto de bitbucket al android studio
  • Cargar sólo parte de un archivo de mapa de bits en Android
  • Android personalizado listview muy lento al desplazarse
  • ¿Es esta una forma válida de mantener una referencia estática y Actividad / Contexto? ¿Por qué no debo hacer esto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.