¿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.

  • Mensaje de Android entre clases
  • Hace TimerTask ejecutando en nuevo hilo
  • UUID.fromString () devuelve un UUID no válido?
  • ¿Cómo obtengo el tamaño del archivo de temp en android?
  • Libgdx se bloquea en Android
  • Métodos genéricos estáticos en .Net vs Java
  • IN XMPP obtener la excepción no autorizada (401), mientras que la presentación del formulario
  • Cómo descifrar AndroidManifest.xml
  • devolución de llamada de intención de difusión: result = CANCELED forIntent
  • Android: transmisión de la cámara como mjpeg
  • Android: Google reproduce los servicios de juegos error de conexión (java.lang.IllegalStateException: GoogleApiClient debe estar conectado.)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.