¿El mejor método para medir el tiempo de ejecución en Android?

¿Cuál es el mejor método para medir el tiempo de ejecución del fragmento de código de Android?

Tengo una sección de código antes y después de lo cual quiero colocar marcas de tiempo para averiguar su tiempo de ejecución (por ejemplo, uno en onCreate() y otro en onDestroy() método de actividad).

He intentado Time.toMillies(false) , pero sólo me devuelve segundos (con 000 constantes al final). También intenté dos funciones de java: System.currentTimeMillis() y System.nanoTime() . La primera devuelve milisegundos de época, la segunda no.

¿Cuál sería la mejor manera de medir el tiempo de ejecución y obtener una buena precisión?

¿Qué pasa con TimingLogger ?

De la documentación de TimingLogger :

 TimingLogger timings = new TimingLogger(YOUR_TAG, "methodA"); // ... do some work A ... timings.addSplit("work A"); // ... do some work B ... timings.addSplit("work B"); // ... do some work C ... timings.addSplit("work C"); timings.dumpToLog(); 

Y el volcado se verá así:

  D/TAG ( 3459): methodA: begin D/TAG ( 3459): methodA: 9 ms, work A D/TAG ( 3459): methodA: 1 ms, work B D/TAG ( 3459): methodA: 6 ms, work C D/TAG ( 3459): methodA: end, 16 ms 

No olvide activar su etiqueta: adb shell setprop log.tag.YOUR_TAG VERBOSE

¿Cuál sería la mejor manera de medir el tiempo de ejecución?

System.nanoTime() es probablemente una buena opción. Jake Wharton está usando eso con Hugo , por ejemplo.

Y obtener una buena precisión

Esto no es estrictamente posible, ya que cualquier cosa puede suceder en el dispositivo mientras se ejecuta el método. Estos factores externos afectarán las mediciones de tiempo, robando tiempo de CPU, atando canales de E / S, etc. Necesitará hacer un promedio de sus pruebas a través de varias ejecuciones para tratar de calcular el promedio de esos factores externos, y la precisión / precisión sufrirá como un error. resultado.

Y, como señala Marcin Orlowski, para averiguar por qué está consumiendo cierto tiempo, use Traceview.

Proceso que básicamente pregunta acerca de se llama perfiles . Hay herramientas para ayudarte a hacer eso en Android. Ver el perfil del artículo con Traceview y dmtracedump en el sitio de desarrolladores.

  • ¿Cuál es el propósito claro de SparseBooleanArray ??
  • Java.lang.StringIndexOutOfBoundsException: index = 0 length = 0 en obtener la base de datos sqlite
  • ViewPagers en un ListView mostrando elementos de la lista en blanco
  • Activity_main no puede ser resuelto o no es un campo
  • Uso de Picasso para cargar una imagen en un mapa de bits
  • Error: los intervalos SPAN_EXCLUSIVE_EXCLUSIVE no pueden tener una longitud cero
  • Codificación y decodificación de bytes con ZXing
  • OnClickListener en Android Studio
  • Usando get () y put () para acceder a valores de píxeles en OpenCV para Java
  • ¿Libgdx es utilizable para juegos 2d?
  • Obtener facebook deeplinks para trabajar en el emulador facebook android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.