什么是Android中最容易执行的时间?
我看了一下,我在Android SDK上找到了TimingLogger,并在这里给出了说明.看起来很方便.但我无法让它发挥作用.这是我的代码:
TimingLogger timings = new TimingLogger("TopicLogTag", "Parsing html");
My code to time here...
timings.dumpToLog();
Run Code Online (Sandbox Code Playgroud)
它应该在LogCat中转储时间.但是我看不到任何东西......我做错了什么?Eclipse没有显示任何变量.我猜它有一些详细的输出,但是我已经设置了LogCat以显示Verbose.谢谢..
mba*_*ord 57
我给了它一个测试运行,我遇到了同样的事情.这一切归结为Javadoc for 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();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我得到了日志的输出:
06-28 08:35:18.693: DEBUG/MyTag(24366): Is Loggable? false
Run Code Online (Sandbox Code Playgroud)
但就是这样.因为它是假的,我怀疑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 }
Run Code Online (Sandbox Code Playgroud)
我不确定为什么当Log.isLoggable明显记录在VERBOSE之上时为什么返回false,因为我的Log.d明显记录了.
您可以从[Log class Javadoc] [3]手动启用该标记的日志记录:
您可以通过设置系统属性来更改默认级别:'setprop log.tag.'级别是VERBOSE,DEBUG,INFO,WARN,ERROR,ASSERT或SUPPRESS.SUPPRESS将关闭标签的所有日志记录.您还可以创建一个local.prop文件,其中包含以下内容:'log.tag.='并将其放在/data/local.prop中.
我通过adb shell以下方式做了
$ adb shell
# setprop
usage: setprop <key> <value>
# setprop log.tag.MyTag VERBOSE
#
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
看看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");
Run Code Online (Sandbox Code Playgroud)
如果你们看看它的源代码,实际上TimingLogger类的实现非常简单.
所以我所做的,完全适合我的用例,是制作我自己的类版本,但改变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);
}
Run Code Online (Sandbox Code Playgroud)
这里的问题正在发生变化
mDisabled = !Log.isLoggable(mTag, Log.VERBOSE);
至
mDisabled = false;
这样我们就不必乱用adb了.
| 归档时间: |
|
| 查看次数: |
18327 次 |
| 最近记录: |