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>
- Android: Ampliación del libro de contactos del usuario. Rendimiento ContentProvider vs Sqlite vs Lista en la memoria
- Almacenamiento de datos de Android, Cuándo utilizar SqlLite y cuándo usar JSON, alternativas de Linq
- Variables estáticas, patrón y rendimiento de Android
- Forma preferida de actualizar sqlite db en android
- ¿Cómo puedo restar estas listas más rápido?
- Android: ¿Hay alguna manera de acelerar canvas.drawBitmap?
- ¿Hay algún beneficio real usando el paso de peatones para Android 4.4 y superiores?
- Responde al teclado mientras se actualiza la interfaz de usuario
- Vista personalizada de Android delegado de grupo addView
- El objeto se convierte en nulo
- Sqlite3 tabla con límite máximo de líneas (por elección) eficiencia
- Cómo dibujar varias líneas con el dedo? (Androide)
- ¿Por qué la API de Android solicita un parámetro de resultados en lugar de un método de devolución?
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.
- GL_OUT_OF_MEMORY después de una llamada a glDrawArrays. ¿Por qué?
- Cambiar automáticamente el fondo del botón y el aspecto del texto cuando se presiona (como iOS)?