Android – ¿Cómo puedo medir el rendimiento de ListView y otras vistas?

¿Cómo puedo medir el FPS de mi ListView ?

Consulte las diapositivas 13-17 de http://code.google.com/events/io/2010/sessions/world-of-listview-android.html .

2 Solutions collect form web for “Android – ¿Cómo puedo medir el rendimiento de ListView y otras vistas?”

No sé sobre el cálculo de FPS (supongo que debería hacerse en todo el sistema y no se calcula por vista), pero puede utilizar el Visor de jerarquía para perfilar el rendimiento de cada View . Le da tiempo necesario para medir, calcular el diseño y dibujar cada View en milisegundos y le ayuda a encontrar objetos de View lenta mostrando círculos amarillos y rojos que indican un mal rendimiento.

Quizás le interese este ListAdapter, que envolverá otro ListAdapter e imprimirá declaraciones de registro sobre cuántas vistas se mostraron por segundo.

 import android.database.DataSetObserver; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; public class VpsAdapter implements ListAdapter { protected int vpsViewCount = 0; protected long vpsStartTimeNanos = System.nanoTime(); protected ListAdapter delegate; public VpsAdapter(ListAdapter delegate) { super(); this.delegate = delegate; } public void resetViewsPerSecond() { vpsViewCount = 0; vpsStartTimeNanos = System.nanoTime(); } public double getViewsPerSecond() { final long now = System.nanoTime(); return (vpsViewCount / (double)(now - vpsStartTimeNanos)) * 1e9; } public int getViewsPerSecondViewCount() { return vpsViewCount; } @Override public boolean areAllItemsEnabled() { return delegate.areAllItemsEnabled(); } @Override public int getCount() { return delegate.getCount(); } @Override public Object getItem(int i) { return delegate.getItem(i); } @Override public long getItemId(int i) { return delegate.getItemId(i); } @Override public int getItemViewType(int i) { return delegate.getItemViewType(i); } @Override public View getView(int i, View view, ViewGroup viewGroup) { ++vpsViewCount; Log.d("VpsAdapter", String.format("VpsAdapter: %.2f views per second (%s views)", getViewsPerSecond(), getViewsPerSecondViewCount())); return delegate.getView(i, view, viewGroup); } @Override public int getViewTypeCount() { return delegate.getViewTypeCount(); } @Override public boolean hasStableIds() { return delegate.hasStableIds(); } @Override public boolean isEmpty() { return delegate.isEmpty(); } @Override public boolean isEnabled(int i) { return delegate.isEnabled(i); } @Override public void registerDataSetObserver(DataSetObserver dataSetObserver) { delegate.registerDataSetObserver(dataSetObserver); } @Override public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { delegate.unregisterDataSetObserver(dataSetObserver); } } 

Para usar, simplemente envuelva su ListAdapter existente en un VpsAdapter, por ejemplo.

 setListAdapter( new VpsAdapter( myAdapter ) ); 

Luego, llame a resetViewsPerSecond() cuando esté listo para iniciar el tiempo y getViewsPerSecond() cuando esté listo para recuperar el resultado. El adaptador también registrará en la consola los vps actuales para cada llamada a getView() .

Yo uso este adaptador en conjunto con ListView.smoothScrollTo( adapter.getCount()-1 ) con el fin de desplazar mediante programación el listview a la parte inferior y obtener el promedio vps.

  • Android personalizado listview muy lento al desplazarse
  • ¿Cuál es la principal ventaja y la desventaja de "no mantener las actividades" en android
  • WebView no carga la página web
  • Cargar sólo parte de un archivo de mapa de bits en Android
  • Fragmentos de Android y su influencia en el rendimiento
  • Anulación de variables de Fragmento on onDestroy ()
  • Problema con la cámara personalizada de Android en algunos dispositivos
  • ¿Por qué el emulador de Android es tan lento? ¿Cómo podemos acelerar el emulador de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.