ListView VERY lento quando le immagini vengono caricate (utilizzando Universal Image Loader)

Il mio elencoView funziona molto liscio con solo text – ma non appena cerco di caricare in anteprime (anche dalla cache), esegue SOO sconcertante.

Sto utilizzando lo script Loader di Immagine Universale

  • Scorrimento nidificato senza soluzione di continuità (Android)
  • come get tutti i cookie o url del cookie da android.webkit.CookieManager
  • Come posso triggersre o distriggersre il GPS in modo programmato su Android?
  • Come submit la richiesta di un amico utilizzando le windows di dialogo di Facebook su Android?
  • Imansible risolvere l'android.support.v7.app importzione
  • Cambiare la sorgente ImageView
  • Il codice nel mio ArticleEntryAdapter all'interno del metodo public View getView(...) :

     /** * 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 mostra che sta caricando le immagini dalla cache (credo):

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

    Sto testando sul mio Samsung Galaxy Nexus e con Android 4.0.4 (anche se il mio minSdkVersion = "8")

  • Qual è la differenza tra "minifyEnabled" e "useProguard" nel plugin Android per Gradle?
  • Come posso evitare lo scorrimento selvatico quando un field di module di input di text in posizione fisica guadagna la messa a fuoco?
  • Come aggiungere scorciatoie applicazioni in modo programmato in android
  • Facebook - Inserisci alla panetworking da un'applicazione Android
  • Modificare gli elementi di NavigationView quando l'utente viene registrato
  • Traccia di stack di printing di Android
  • 2 Solutions collect form web for “ListView VERY lento quando le immagini vengono caricate (utilizzando Universal Image Loader)”

    Metti l'istante di configuration ImageLoaderConfiguration, ImgDisplayOptions di DisplayImageOptions, ImageLoader imageLoader al di fuori del metodo getView come campi privati ​​/ membri della class Adapter. Dovresti solo creare queste cose una volta, non sempre quando viene chiamato getView.

    Modifica: senza vedere la tua intera class Adapter, qui un pugnalato a quello che sto dicendo. Spero che sia vicino a quello che hai e puoi farlo funzionare. Lemme sanno in entrambi i casi.

     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 } } } 

    Potrei sbagliarmi, ma quando ho affrontato questo problema, ho osservato che utilizzando immagini di size più piccole ha aumentato la velocità immensamente. In precedenza stavo usando immagini in sovraccarico di 150KB, li ho commutati a circa 10 pezzi ed ho funzionato perfettamente. Basta aggiungere al suddetto treno di pensiero, potrebbe essere utile per ottimizzare in seguito.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.