zoukankan      html  css  js  c++  java
  • 《Android应用性能优化》 第6章 性能评测和剖析

    1、时间测量

    System.currentTimeMillis     精读和准确度可能不够;更改系统时间会影响结果;UTC时间1970/1/1 00:00:00到现在的毫秒数

    System.nanoTime        没有定义参考时间,只能用来测量时件间隔;别的线程会导致测量时间不正确

    Debug.threadCpuTimeNanos   只测量当前线程中所花费的时间,所以它的结果更准确;如果遥测梁的部分运行在多个线程上,要测量每个线程,并相加

    System.currentThreadTimeMillis  

    System.elapsedRealtime

    System.uptimeMillis

    需调用两次,求差值

    2、方法调用跟踪

    (1)Debug.startMethodTracing()  由Android提供,创建跟踪文件。用Traceview工具调试和分析应用。有四个变种:

    startMethodTracing()

    startMethodTracing(String traceName)

    startMethodTracing(String traceName, int bufferSize)

    startMethodTracing(String traceName, int bufferSize, int flags)

    traceName  记录保存的文件名,就跟log.txt一样。如果已经存在会被截断。保证有权限和路径

    bufferSize   文件大小(默认8MB)

    flags       只有一个,Debug.TRACE_COUNT_ALLOCS。可以是0 或者 Debug.TRACE_COUNT_ALLOCS

    对应的有  stopMethodTracing

    实例代码

    Debug.startMethodTracing("/sdcard/awesometrace.trace") ;
    
    //需要跟踪的操作
    
    BigInteger fN = Fibonacci.computeRecursivelyWithCache(100000);
    
    Debug.stopMethodTracing();
    
    // 现在在/mnt/sdcard 目录下会有awesometrace.trace文件。 在DDMS中pull出  或者adb pull

    (2)tools下有TraceView工具。命令行:traceview awesometrace.trace 启动

    Name 方法名

    Incl % 此方法中占的时间百分比(包含子方法)

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

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

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

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

    Time/Call 平均每次调用时间

    Parents 此方法的调用者

    Children 此方法调用的方法

    Parents while recursive递归时此方法的调用者

    Children while recursive递归时此方法调用的方法

    时间轴可以拖拽 方法和缩小

    注:正常情况,方法可以被Dalvik的JIT编译器编译为机器码。

    但是模拟跟踪时JIT编译器是禁用的。所以实际中,真实场景中花费的时间应该比显示出来的更少一些。

    (3)在DDMS中启动TraceView。需要点击开始跟踪,再次点击之后停止。

    3、Log

    verbose(log.v)

    debug(log.d)

    info(log.i)

    warning(log.w)

    error(log.e)

    assert(log.wtf)

    Log.println(Log.DEBUG, TAG, "message") 相当于Log.d(...)

    注:Log.wtf()方法在API8引入。但是Log.ASSERT在API 1就有了

    因此要兼容 要使用Log.println(Log.VERBOSE, TAG, "message")而不是Log.wtf(...)

  • 相关阅读:
    实验8 SQLite数据库操作
    实验7 BindService模拟通信
    实验6 在应用程序中播放音频和视频
    实验6 在应用程序中播放音频和视频
    实验5 数独游戏界面设计
    实验4 颜色、字符串资源的使用
    实验五存储管理实验
    实验四:主存空间的分配和回收
    实验三 进程调度模拟程序
    实验8 SQLite数据库操作
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/4428433.html
Copyright © 2011-2022 走看看