Exécution du code temporel dans Android

Quelle est l'exécution la plus facile à exécuter dans Android?

J'ai regardé autour d'un peu et j'ai trouvé TimingLogger sur le SDK d'Android, et des instructions ici . Il semble très pratique. Mais je ne peux pas le faire fonctionner. C'est mon code:

  • Comment ajouter des rectangles au dessus du rectangle existant dans un canevas
  • Cocos2D OU libgdx pour Android Game Development
  • Définir le fond d'écran en direct par programme
  • La connexion à adb est désactivée et une erreur grave s'est produite. Vous devez redémarrer AdB et Eclipse. Assurez-vous que l'AdB est correctement situé
  • Différence entre le type de saisie de texte simple et le type de saisie de nom de personne dans Editext dans Android
  • Dossier JNI dans Android Studio
  • TimingLogger timings = new TimingLogger("TopicLogTag", "Parsing html"); My code to time here... timings.dumpToLog(); 

    Il est censé voler les temps dans LogCat. Mais je ne vois rien … Je fais quoi de mal? Eclipse ne présente aucun varnings. Je suppose qu'il a quelque chose avec un déboursé détaillé, mais j'ai configuré LogCat pour afficher Verbose. Je vous remercie..

    6 Solutions collect form web for “Exécution du code temporel dans Android”

    Je lui ai donné une épreuve de test et je ressens la même chose. Tout se résume à ce petit document de Javadoc pour TimingLogger :

    Si Log.isLoggable n'est pas activé pour au moins le niveau Log.VERBOSE pour cette balise au moment de la création, l'appel addSplit et dumpToLog ne fera rien.

    J'ai fait un test localement:

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

    Et, curieusement, je reçois une sortie dans le journal:

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

    Mais c'est tout. Et puisqu'il est faux, je doute que TimingLogger fasse n'importe quoi, en fonction du code 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 } 

    Je ne suis pas sûr de savoir pourquoi Log.isLoggable est en train de revenir faux lorsqu'il se connecte clairement au-dessus de VERBOSE, puisque mon Log.d a bien sûr été enregistré.

    Vous pouvez activer la journalisation de cette balise manuellement à partir de [Classe de connexion Javadoc] [3]:

    Vous pouvez modifier le niveau par défaut en définissant une propriété système: 'setprop log.tag. 'Où le niveau est soit VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, ou SUPPRESS. SUPPRESS éteindra toute la journalisation de votre balise. Vous pouvez également créer un fichier local.prop qui contient les éléments suivants: 'log.tag. =' Et placez-le dans /data/local.prop.

    Ce que j'ai fait à travers adb shell

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

    Résulte 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 

    Voir le commentaire de droidgren sur cette réponse – apparemment, un appel à addSplit est également nécessaire.

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

    J'ai trouvé une autre solution plus simple qui mesure exactement le même temps que TimingLogger, qui ne nécessite pas 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"); 

    Si vous regardez son code source , la mise en œuvre de la classe TimingLogger est assez simple.

    Donc, ce que j'ai fait, qui correspond parfaitement à mon cas d'utilisation, était de faire ma propre version de la classe mais de changer la méthode de reset()

     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 prise ici change de

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

    à

    mDisabled = false;

    De cette façon, nous ne devons pas faire problème avec AdB.

    Parfois, nous n'avons pas besoin de connaître l'heure exacte qui nous a pris une opération, mais nous voulons savoir, pourquoi cette opération a pris tellement de temps. Ainsi, pour accélérer le code, il suffit de connaître une sorte d'ordre relationnel des parties de cette opération où l'un des plus grand nombre de temps semble être celui que vous devez optimiser. Par conséquent, android apporte un suivi de méthode:

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

    Ensuite, l'os écrit le fichier de trace contenant toutes les informations d'appel sur le système de fichiers. Faites simplement glisser ce fichier sur traceview.bat et commencez à inspecter les appels pris pendant combien de temps.

    Avantages:

    • Vous pouvez inspecter toutes les fonctions appelées et les méthodes appelées pendant le suivi.
    • Pas besoin de synchroniser les données pour les applications multithread.
    • Trace est écrit dans un fichier automatiquement – aucune magie log-chat ou quoi que ce soit nécessaire. Toutes les données sont encapsulées ensemble, prêtes à être inspectées.
    • Dès que vous commencez à ajouter des mesures de temps et surtout à la journalisation, vous détruisez votre synchronisation de toute façon.

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

    Si vous recherchez uniquement des journaux comme expliqué dans developer.android.com, vous ne pourrez pas voir les journaux. Utilisez donc la commande ci-dessous:

    1. adb shell setprop log.tag.MyTag VERBOSE

    Remarque : MyTag est le premier paramètre que vous avez passé lors de la création de TimingLogger comme suit:

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

    Pour la réponse à vos questions, vous devez exécuter la commande suivante: adb shell setprop log.tag.TopicLogTag VERBOSE

    Et vous êtes là. Bonne codage !!!

    Essayez de faire:

     adb shell logcat 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.