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编译器编译为机器码,所以在真实场景下执行需要花费的时间会更少。此外,跟踪不会显示本地函数耗费的时间。下一章节会补充本地方法跟踪)
- Android应用性能评测和剖析
- Android应用性能评测调优
- android开发之Android应用性能评测调优
- 腾讯Bugly干货分享:Android应用性能评测调优
- 腾讯Bugly干货分享:Android应用性能评测调优
- 腾讯Bugly干货分享:Android应用性能评测调优
- 腾讯Bugly干货分享:Android应用性能评测调优
- Android应用性能剖析全攻略
- Android应用性能剖析全攻略
- Android应用性能剖析全攻略
- Android应用性能剖析全攻略
- Android App 性能评测与调优
- SQLite数据库操作速度和性能评测
- Chrome&IE&Firefox性能和标准评测
- 系统性能评测和可靠性基础
- 浏览器性能评测:评测工具
- Android应用提升性能和用户体验
- Android应用提升性能和用户体验
- MongoDB 多键索引
- 深度置信网络学习总结
- Drupal 8 内核模块变化
- 策略模式
- CentOS 7进不去图形界面 (linux)
- Android应用性能评测和剖析
- ubuntu环境下搭建好lamp后无法显示代码运行效果解决办法
- actor 模型原理 (一)
- php通过经纬度获取城市
- java中使用Calendar获取指定日期前n个小时的时间日期
- Android学习笔记1--按钮的四种点击事件
- shell基础学习
- php 中的重载技术——解决调用对象(或类)的未定义的属性或方法出错问题
- (十五)枚举