Выполнение временного кода в Android

Что самое легкое к выполнению времени в Android?

Я озирался немного, и я нашел TimingLogger на SDK Android и инструкции здесь. Это выглядит очень удобным. Но я не могу получить его работа. Это - мой код:

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

Это, как предполагается, выводит времена в LogCat. Но я ничего не вижу.. Я, Что я делаю неправильно? Eclipse не показывает varnings. Я предполагаю, что это имеет что-то с подробным ouput, но я установил LogCat для показа Подробный.Спасибо..

34
задан Frank Stefan 15 December 2016 в 16:42
поделиться

3 ответа

Я провел тестовый прогон, и у меня возникли проблемы то же самое. Все сводится к этому небольшому фрагменту описания в Javadoc для TimingLogger :

Если Log.isLoggable не включен как минимум до уровня Log.VERBOSE для этот тег во время создания, затем вызовы addSplit и dumpToLog будут делать ничего такого.

Я провел тест локально:

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

И, как ни странно, я получил вывод в журнал:

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

Но это все. И так как это ложь, я сомневаюсь, что TimingLogger что-то делает, основываясь на коде 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     }

Я не уверен, почему Log.isLoggable возвращает false, когда он явно регистрируется выше VERBOSE, поскольку мой журнал .d явно залогинен.

Вы можете включить ведение журнала для этого тега вручную из [Log class Javadoc] [3]:

Вы можете изменить уровень по умолчанию, установка системного свойства: 'setprop log.tag. ' Где уровень: ГЛАГОЛЬНАЯ, ОТЛАДКА, ИНФОРМАЦИЯ, WARN, ERROR, ASSERT или SUPPRESS. ПОДДЕРЖКА отключит все журналы для ваш тег. Вы также можете создать local.prop файл с следующие в нем: 'log.tag. =' и поместите это в /data/local.prop.

Что я сделал через adb shell :

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

Результаты в:

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

См. Комментарий droidgren к этому ответу - очевидно, также необходим вызов addSplit.

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

57
ответ дан 27 November 2019 в 16:25
поделиться

Попробуйте выполнить:

adb shell logcat
0
ответ дан 27 November 2019 в 16:25
поделиться

Я нашел другое более простое решение, которое измеряет то же время, что и TimingLogger, но не Не требуется 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");
9
ответ дан 27 November 2019 в 16:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: