studio permission permisos name internet intent example editar androidmanifest android

permission - Ejecución del código de tiempo en Android



permisos internet android manifest (6)

¿Cuál es la ejecución de tiempo más fácil en Android?

Miré un poco y encontré TimingLogger en el SDK de Android, y las instrucciones here . Parece muy conveniente. Pero no puedo hacer que funcione. Este es mi código:

TimingLogger timings = new TimingLogger("TopicLogTag", "Parsing html"); My code to time here... timings.dumpToLog();

Se supone que debe volcar los tiempos en LogCat. Pero no puedo ver nada ... I ¿Qué estoy haciendo mal? Eclipse no muestra ningún variado. Supongo que tiene algo con salida prolija, pero he configurado LogCat para que muestre Verbose. Gracias..


A veces no necesitamos saber la hora exacta que nos llevó a una operación, pero queremos saber por qué esa operación tomó tanto tiempo. Por lo tanto, para acelerar el código, solo necesitamos saber algún tipo de orden relacional de partes de esa operación donde el que ocupa más tiempo parece ser el que debe optimizar. Por lo tanto, Android trae el seguimiento de métodos:

Debug.startMethodTracing("YOUR_TRACE_FILE_NAME"); // Do your operations Debug.stopMethodTracing();

Luego, el sistema operativo escribe el archivo de rastreo que contiene todas las informaciones de llamadas en el sistema de archivos. Simplemente traceview.bat y traceview.bat ese archivo en traceview.bat y comience a inspeccionar qué llamadas tardaron en traceview.bat .

Beneficios:

  • Puede inspeccionar todas las funciones y métodos llamados que se han invocado durante el rastreo.
  • No es necesario sincronizar datos para aplicaciones multiproceso.
  • Trace se escribe en el archivo automáticamente - sin log cat magic o lo que sea necesario. Todos los datos están encapsulados juntos, listos para ser inspeccionados.
  • Tan pronto como comienzas a agregar la medición de tiempo y especialmente el registro, de todos modos arruinas tu tiempo.

Enlace: http://developer.android.com/tools/debugging/debugging-tracing.html


Encontré otra solución más simple que mide exactamente el mismo tiempo que TimingLogger, que no requiere setprop.

private long startnow; private long endnow; startnow = android.os.SystemClock.uptimeMillis(); *Your time consuming code here* endnow = android.os.SystemClock.uptimeMillis(); Log.d("MYTAG", "Execution time: " + (endnow - startnow) + " ms");


Le di una prueba y estoy experimentando lo mismo. Todo se reduce a este pequeño fragmento de la descripción en el Javadoc para TimingLogger :

Si el Log.isLoggable no está habilitado al menos al nivel Log.VERBOSE para esa etiqueta en el momento de la creación, las llamadas addSplit y dumpToLog no harán nada.

Hice una prueba localmente

TimingLogger timings = new TimingLogger("MyTag", "Initialization"); Log.d("MyTag", "Is Loggable? " + Log.isLoggable("MyTag", Log.VERBOSE)); timings.dumpToLog();

Y, curiosamente, obtengo una salida para el registro:

06-28 08:35:18.693: DEBUG/MyTag(24366): Is Loggable? false

Pero eso es todo. Y dado que es falso, dudo que TimingLogger esté haciendo algo, basado en el código TimingLogger :

90 /** 91 * Clear and initialize a TimingLogger object that will log using 92 * the tag and label that was specified previously, either via 93 * the constructor or a call to reset(tag, label). If the 94 * Log.isLoggable is not enabled to at least the Log.VERBOSE 95 * level for that tag at creation time then the addSplit and 96 * dumpToLog call will do nothing. 97 */ 98 public void reset() { 99 mDisabled = !Log.isLoggable(mTag, Log.VERBOSE); 100 if (mDisabled) return; 101 if (mSplits == null) { 102 mSplits = new ArrayList<Long>(); 103 mSplitLabels = new ArrayList<String>(); 104 } else { 105 mSplits.clear(); 106 mSplitLabels.clear(); 107 } 108 addSplit(null); 109 }

No estoy seguro de por qué Log.isLoggable devuelve falso cuando, obviamente, está iniciando sesión en VERBOSE anterior, ya que mi Log.d obviamente inició sesión.

Puede habilitar el registro para esa etiqueta manualmente desde [Log class Javadoc] [3]:

Puede cambiar el nivel predeterminado configurando una propiedad del sistema: ''setprop log.tag. ''Donde el nivel es VERBO, DEBUG, INFO, WARN, ERROR, ASSERT o SUPPRESS. SUPPRESS desactivará todos los registros de su etiqueta. También puede crear un archivo local.prop que contenga lo siguiente: ''log.tag. ='' Y colocarlo en /data/local.prop.

Lo que hice a través de adb shell :

$ adb shell # setprop usage: setprop <key> <value> # setprop log.tag.MyTag VERBOSE #

Resultados en:

06-28 08:53:42.447: DEBUG/MyTag(24739): Is Loggable? true 06-28 08:53:44.744: DEBUG/MyTag(24739): Initialization: begin 06-28 08:53:44.744: DEBUG/MyTag(24739): Initialization: end, 0 ms

Vea el comentario de droidgren sobre esta respuesta: aparentemente también es necesario llamar a AddSplit.

[3]: http://developer.android.com/reference/android/util/Log.html#isLoggable(java.lang.String , int)


Si miran su código fuente , en realidad la implementación de la clase TimingLogger es bastante simple.

Entonces, lo que hice, que encaja perfectamente para mi caso de uso, fue hacer mi propia versión de la clase, pero cambiando el método de reset() a

public void reset() { mDisabled = false; // <- This is what has changed. if (mDisabled) return; if (mSplits == null) { mSplits = new ArrayList<Long>(); mSplitLabels = new ArrayList<String>(); } else { mSplits.clear(); mSplitLabels.clear(); } addSplit(null); }

La captura aquí está cambiando de

mDisabled = !Log.isLoggable(mTag, Log.VERBOSE);

a

mDisabled = false;

De esta forma no tenemos que meternos con adb.


Si simplemente busca registros tal como se explica en developer.android.com, no podrá ver los registros. Así que use el siguiente comando:

  1. adb shell setprop log.tag.MyTag VERBOSE

Nota : MyTag es el primer parámetro que pasó al crear un nuevo TimingLogger como se muestra a continuación:

TimingLogger timings = new TimingLogger("MyTag", "MyMethodName");

Para la respuesta de sus preguntas, debe ejecutar debajo del comando: adb shell setprop log.tag.TopicLogTag VERBOSE

Y ahí estás. ¡Feliz codificación!


Trata de hacerlo:

adb shell logcat