Что самое легкое к выполнению времени в Android?
Я озирался немного, и я нашел TimingLogger на SDK Android и инструкции здесь. Это выглядит очень удобным. Но я не могу получить его работа. Это - мой код:
TimingLogger timings = new TimingLogger("TopicLogTag", "Parsing html");
My code to time here...
timings.dumpToLog();
Это, как предполагается, выводит времена в LogCat. Но я ничего не вижу.. Я, Что я делаю неправильно? Eclipse не показывает varnings. Я предполагаю, что это имеет что-то с подробным ouput, но я установил LogCat для показа Подробный.Спасибо..
Я провел тестовый прогон, и у меня возникли проблемы то же самое. Все сводится к этому небольшому фрагменту описания в 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)
Я нашел другое более простое решение, которое измеряет то же время, что и 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");