Android – ListView con imágenes se desplaza demasiado lento incluso sin ningún procesamiento en el método getView del adaptador

Estoy intentando crear una lista de personas usando ListView / customadapter. Las filas se muestran bastante rápido, pero el desplazamiento es muy lento, incluso en un dispositivo razonablemente rápido. He probado varias sugerencias, excepto el uso de asynchtask con la esperanza de que como último recurso, pero nada parece mejorar el rendimiento. Finalmente como último tiro antes de usar asynchtask intenté quitar todo el proceso en el método del getview del adaptador. Ahora todo lo que hace es inflar la vista de un xml y mostrar las filas en blanco. Me di cuenta de que incluso entonces la velocidad de desplazamiento no ha mejorado. Así que sospecho que la causa podría ser la estructura de mi diseño. ¿Hay algún cambio que pueda hacer para hacerlo más rápido? Cualquier ayuda sería apreciada. Gracias por adelantado.

<TextView android:id="@+id/mId" android:text="TextView" android:layout_width="0px" android:layout_height="0px"></TextView> <TextView android:id="@+id/phone" android:layout_height="0px" android:layout_width="0px"></TextView> <TextView android:id="@+id/email" android:layout_height="0px" android:layout_width="0px"></TextView> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="110dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:src="@drawable/bl_row_bg"></ImageView> <TextView android:paddingTop="9.7dp" android:id="@+id/name" android:paddingLeft="25.88dp" android:text="xxxx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/black" android:lines="1" android:ellipsize="end" android:textStyle="bold"></TextView> <ImageView android:src="@drawable/default_avatar" android:id="@+id/image1" android:layout_height="110dp" android:layout_width="110dp" android:scaleType="fitXY" android:paddingTop="6.47dp" android:paddingBottom="6.47dp" android:paddingRight="6.47dp" android:layout_alignParentRight="true"></ImageView> <TextView android:id="@+id/txt1" android:paddingLeft="25.88dp" android:text="Turning 24" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/name" android:textColor="@android:color/black"></TextView> <TextView android:id="@+id/txt2" android:paddingLeft="25.88dp" android:text="23 Days to go" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/txt1" android:textColor="@android:color/black"></TextView> <ImageView android:layout_height="64.7dp" android:src="@drawable/ss_image2" android:id="@+id/image2" android:layout_width="64.7dp" android:scaleType="fitEnd" android:layout_alignBottom="@+id/imageView1" android:layout_alignParentRight="true"></ImageView> <ImageView android:src="@drawable/bl_date_background" android:id="@+id/datebg" android:layout_height="110dp" android:layout_width="25dp"></ImageView> <ImageView android:id="@+id/icon1" android:layout_toRightOf="@+id/datebg" android:layout_height="30dp" android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView> <ImageView android:id="@+id/icon2" android:layout_toRightOf="@+id/icon1" android:layout_height="30dp" android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView> <ImageView android:id="@+id/icon3" android:layout_toRightOf="@+id/icon2" android:layout_height="30dp" android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView> <ImageView android:id="@+id/icon4" android:layout_toRightOf="@+id/icon3" android:layout_height="30dp" android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView> <ImageView android:id="@+id/icon5" android:layout_toRightOf="@+id/icon4" android:layout_height="30dp" android:layout_width="30dp" android:layout_alignBottom="@+id/imageView1"></ImageView> <TextView android:id="@+id/date" android:text="Tue, Dec 12" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentLeft="true" android:textColor="@android:color/black" android:textStyle="bold" android:gravity="center" android:visibility="invisible"></TextView> 

Trate de seguir

 ListView lv = getListView(); lv.setCacheColorHint(Color.TRANSPARENT); // not sure if this is required for you. lv.setFastScrollEnabled(true); lv.setScrollingCacheEnabled(false); 

Asegúrese de consultar primero la documentación actual de Android y comparar los métodos Java con los atributos XML de Android:

http://developer.android.com/reference/android/widget/ListView.html

Para aquellos que necesitan optimización en atributos XML:

 <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/transparent" android:cacheColorHint="@android:color/transparent" android:fastScrollEnabled="true" android:persistentDrawingCache="scrolling" android:scrollingCache="false" /> 

Usted puede fácilmente hacer el ImageView asíncrono mediante WebImageView

También noté (como @Abid estados) que llamando lv.setScrollingCacheEnabled (false); Mejora el desplazamiento. Tenía un ListView que funcionaba bien en un Galaxy Tab 7 "y que era terriblemente lento en un Galaxy Tab 10.1". La razón fue la asignación de memoria necesaria para la caché (y la necesidad de hacer crecer la pila).

Si está creando su propio adaptador para hacer frente a los elementos de vista de lista, tendría un mapa de Drawables que puede mantener referencia en el Adapter . Lo más probable es que el problema es que cada vez que el adaptador de vista de lista está recibiendo cada vista secundaria para la vista de lista, tiene que cargar esa imagen cada vez. Sería más performant para cargar los en la memoria antes de la mano y luego sólo hacer referencia a ellos.

  • Eficiencia de getDrawable (): ¿es el Drawable almacenado en caché por el framework?
  • Consejos sobre dibujo de alto rendimiento en Android
  • Cómo mejorar el rendimiento de JS menú arrastrar en WebView en Android
  • Está llamando libgdx SpriteBatch método de inicio y fin varias veces caro?
  • ¿Es una buena idea escribir juegos para móviles en ActionScript3 en lugar de Java / Objective-C?
  • Android: nesting FrameLayouts - ¿cuál es la sobrecarga de rendimiento exacto?
  • El proveedor de contactos de Android sólo obtiene contactos telefónicos con todos los correos electrónicos
  • ¿Puedo activar multidex en la compilación de depuración de Android solamente?
  • ¿Cómo configurar el desplazamiento perfomance para webview?
  • Map.clear () vs nuevo Mapa: ¿Cuál será mejor?
  • ¿Qué es más rápido? Una intent.putExtras (Bundle con cadenas) o muchos intent.putExtra (String)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.