android traceview异步事件

时间:2016-05-11 18:51:35

标签: android android-traceview

我想使用traceview来衡量几个异步事件的性能。异步事件在回调中传递给我,看起来类似于下面的代码。

interface EventCallback {

    void onStartEvent(String name);

    void onStopEvent(String name);
}

每个异步事件都以" onStartEvent"开头。呼叫并以" onStopEvent"结束调用

我想为每个活动创建跟踪文件。从我在这里阅读(http://developer.android.com/tools/debugging/debugging-tracing.html#creatingtracefiles),它无法跟踪异步事件,因为调用的顺序必须是"结构化的"在"堆栈"喜欢订购。所以,调用" Debug.stopMethodTracing()"始终适用于最近一次调用" Debug.startMethodTracing(" calc");"

所以,如果我按以下顺序收到回调。

onStartEvent(A)

onStartEvent(B)

onStopEvent(A)

onStopEvent(B)

将被解释为

Debug.startMethodTracing(" A&#34);

Debug.startMethodTracing(" B&#34);

Debug.stopMethodTracing(); //将适用于" B"而不是" A"

Debug.stopMethodTracing(); //将适用于" A"而不是" B"

使用traceview,无论如何都可以做我想要的事情吗?即跟踪"非结构化"异步事件?

1 个答案:

答案 0 :(得分:1)

traceview可能是错误的工具。如果您真的想要使用此路由,则可以保留“活动事件计数”,并且只要存在正在处理的事件,就会保持跟踪文件处于打开状态。这可能导致同一跟踪文件中出现多个事件,但是您正在跟踪VM中的方法调用,因此没有简单的方法。

如果您的事件发生在不同的线程上,您可以使用后处理步骤将它们分开。这需要一些努力来解析数据并去掉不需要的记录。 (例如,请参阅thisthis。)

你并没有真正说出你想要测量的东西。例如,如果您只想要开始/结束时间,您可以将它们写入您自己的日志文件中,并跳过所有跟踪视图的乐趣。

根据您的目标,systrace可能更容易使用。遗憾的是,自定义事件类(Trace)仅公开同步事件API - 如果您不介意使用反射来访问非公共接口,您还可以生成async events