测量Android执行时间的最佳方法?

时间:2014-05-28 13:59:35

标签: java android

衡量Android代码段执行时间的最佳方法是什么?

我之前和之后都有一段代码,我想放置时间戳以找出它的执行时间(例如onCreate()中的一个和onDestroy()活动方法中的另一个)。

我已经尝试了Time.toMillies(false),但它只向我返回秒数(结尾处为常量000)。我还尝试了两个java函数:System.currentTimeMillis()System.nanoTime()。 第一个返回毫秒的纪元时间,第二个没有。

衡量执行时间和获得良好精确度的最佳方法是什么?

5 个答案:

答案 0 :(得分:64)

TimingLogger 怎么样?

来自https://support.google.com/mail/answer/188131文档:

TimingLogger timings = new TimingLogger(YOUR_TAG, "methodA");
// ... do some work A ... 
timings.addSplit("work A");
// ... do some work B ... 
timings.addSplit("work B");
// ... do some work C ... 
timings.addSplit("work C");
timings.dumpToLog();

并且转储看起来像:

     D/TAG     (3459): methodA: begin
     D/TAG     (3459): methodA:      9 ms, work A
     D/TAG     (3459): methodA:      1 ms, work B
     D/TAG     (3459): methodA:      6 ms, work C
     D/TAG     (3459): methodA: end, 16 ms

不要忘记运行以下代码来启用代码:adb shell setprop log.tag.YOUR_TAG VERBOSE

答案 1 :(得分:11)

  

衡量执行时间的最佳方法是什么

System.nanoTime()可能是个不错的选择。例如,Jake Wharton正在使用Hugo

  

并获得良好的精确度

这不是严格可行的,因为在执行方法时设备上可能发生任何事情。这些外部因素会影响您的时间测量,通过窃取CPU时间,占用I / O通道等。您需要在多次运行中平均测试以尝试平均这些外部因素,并且精度/精度将受到影响结果

而且,正如Marcin Orlowski指出的那样,为了实际找出为什么你消耗了一定的时间,请使用Traceview。

答案 2 :(得分:5)

Kotlin开发人员

以毫秒为单位获取经过的时间:

val elapsedTime= measureTimeMillis {
            // call you method from here or add any other statements
} 

要在NanoSeconds中获取时间,

val elapsedTime= measureNanoTime {
            // call you method from here or add any other statements
}

答案 3 :(得分:4)

您提出的问题称为profiling,还有一些工具可以帮助您解决Android问题。请参阅官方开发者网站上的文章Profiling with Traceview and dmtracedump

答案 4 :(得分:4)

我通常使用System.nanoTime()进行快速测量。

像这样的简单设置

   val startTime =   System.nanoTime()

    //DO SOMETHING

   Log.e("Measure", TASK took : " +  ((System.nanoTime()-startTime)/1000000)+ "mS\n")