Android应用性能评测和剖析

来源:互联网 发布:如何上google 知乎 编辑:程序博客网 时间:2024/05/16 17:52

             为了确定代码和功能是否需要优化,优化后是否有提升,针对性能进行度量是非常必要的。

大多情况,性能使用函数完成某个操作所花费的的时间作为测量依据。比如,游戏的性能一般用每秒渲染多少帧进行度量,这个直接

由渲染帧所需要的时间决定,比如某个游戏要保持60帧/秒的恒定速率,那么每帧渲染和显示的时间应该要小于16.67毫秒(注:小于100毫秒的响应时间才会让人有瞬时的感觉)

             一、时间测量

     Java和Android提供了以下API,可以用来测量时间和性能:

     System.currentTimeMillis(Java)(不建议使用,精度和准确度不够,且更改系统时间会影响结果)

     System.nanoTime(Java)(建议使用,提供了更好的精度和准确度)

          Debug.threadCpuTimeNanos(Android)

     SystemClock.currentThreadTimeMillis(Android)

     SystemClock.elapsedRealTime(Android)

     SystemClock.uptimeMillis(Android)

     要测量时间,需调用两次计算时间差来度量性能。

   二、方法调用跟踪

    一旦确定在哪儿花费了过多时间,就需要了解更多细节,找出罪魁祸首的方法。这时可以利用跟踪工具创建方法跟踪文件,之后用Traceview工具进行分析。

  2.1 Debug.startMethodTracing()

  该方法有四个变种:

  Debug.startMethodTracing()

          Debug.startMethodTracing(String traceName)

          Debug.startMethodTracing(String traceName,int bufferSize)

  Debug.startMethodTracing(String traceName,int bufferSize, int flags)

  Android提供了Debug.startMethodTracing()方法来创建跟踪文件,然后用Traceview工具调试和分析应用。该文件默认会创建在sdcard目录下,文件默认最大

          大小是8MB

  代码示例:

  Debug.startMethodTracing(“/sdcard/test.trace”);

  / /需要跟踪的操作

  Debug.stopMethodTracing();

  2.2 使用Traceview工具

  Android SDK tolls下有一个Traceview的工具,它可以分析这些跟踪文件并给出图形化的结果展示。你只需要在命令行下输入 traceview awesometrace.trace 就可以

          启动Traceview。

  Traceview的信息包含了所有的函数调用,以及调用执行的时间和调用次数

   表中有以下7列内容:

   Name:方法名

   Inc %:此方法所占的时间百分比(包含子方法)

   Inclusive:此方法所花毫秒数(包含子方法)

   Excl %:此方法所占时间百分比(不包含子方法)

         Exclusive :此方法所花毫秒数(不包含子方法)

   Calls+RecurCalls/Total:调用和递归调用次数

   Time/Call:平均每次调用时间

   (注:启用跟踪时,Dalvik的JIT编译器是禁用的,得到的结果可能会有一定误导性,因为方法可以被Dalvik的JIT编译器编译为机器码,所以在真实场景下执行需要花费的时间会更少。此外,跟踪不会显示本地函数耗费的时间。下一章节会补充本地方法跟踪)


1 0