一、TraceView工具
TraveView采集和分析方法的执行时间和数据,用于跟踪你的代码中的性能下降问题;
二、启动TraveView
Android Studio->Tools->Android->Android Device Monitor->DDMS;
三、使用TraveView
这里有两种方式,来生trace日志文件:
1. 在你的代码中使用Debug类 ,调用它的startMethodTracing()和stopMethodTracing()方法,来启动和暂停收集trace日志信息。这种方式非常精确,因为你可以在你的代码中指定从哪里开始和结束收集trace日志信息;
2. 使用DDMS中的Method Profiling功能来生成trace日志,这种方法精确性比较低,但是在你无法访问代码或者不需要精确日志的时候比较有用;
下面我们分别使用如下两种方式生成日志信息;
方法一:
在想要分析的代码中加入Debug类的startMethodTracing()和stopMethodTracing()方法调用(比如分析某个Activity从onCreate到onDestroy生命周期的方法调用),并且在AndroidManifest.xml中添加相关权限;
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//开始收集日志(/sdcard/home.trace)
Debug.startMethodTracing("home");
setContentView(R.layout.activity_main);
}
@Override
protected void onDestroy() {
super.onDestroy();
//停止收集日志
Debug.stopMethodTracing();
}
... ...
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.qunar.home">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application>
... ...
</application>
</manifest>
运行到该Activity页面,然后退出(执行了该Activity的onCreate和onDestroy方法),生成的日志会保存在你的设备的手机SD卡中。使用adb pull命令获取该日志文件;
D:\>adb pull ./data/media/0/Android/data/com.qunar.home/files/home.trace
[100%] ./data/media/0/Android/data/com.qunar.home/files/home.trace
注意:如果在设备的SD卡中找不到trace日志文件,可以进入adb shell,使用find . -name
“*.trace”命令进行查找;
DDMS->File->Open File打开获取的trace日志文件进行分析,如下文图示;
方法二:
Devices->选择app->点击Start Method Profiling按钮->Profiling Options->Sample based Profiling(Sampling frequency:1000microseconds)->OK按钮;
运行你的App,如果你关注用户体验的性能问题,执行相关对的操作,完毕后点击Stop Method Profiling按钮。等待trace加载,如果你记录了比较长时间它可能会花费较长的时间;
TraceView包含几个部分:Timeline面板、Profile面板和Find搜索框:
Timeline面板:可以看见你的代码随时间的执行顺序,使用鼠标拖拽Timeline可以放大和缩小查看,放大时每个方法会扩展成一个彩色的U型图,图的左边是方法执行的开始,右边是结束;
- 每行代表一个线程;
- 在Timeline上每个条代表一个方法的执行;
- 不同的方法显示不同的颜色,你可以看见一个方法的执行时间内颜色是相同的;
Profile面板:显示了某个线程(你在Timeline面板中选择的线程)中各个函数的调用情况;
- 选择一个方法来查看谁调用了它(Parent)和它调用了谁(Children);
- 被选中的方法也会在Timeline中高亮显示;
- 这些列分别显示了CPU执行时间和调用次数等信息,如下:
Incl Cpu Time:某函数占用的CPU时间,包含内部调用其它函数的CPU时间;
Excl Cpu Time:某函数占用额CPU时间, 但不包含内部调用其它函数的CPU时间;
Incl Real Time:某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间;
Excl Real Time:某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间;
Call+Recur Calls/Total:某函数被调用的次数以及递归调用次数的百分比;
Cpu Time/Call:某函数调用CPU时间和调用次数的比,相当于该函数平均执行时间;
Real Time/Call:某函数调用真实时间和调用次数的比,相当于该函数平均真实执行时间;
Find输入框:可以搜索你感兴趣的方法,高亮显示在Timeline上;
1.新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息。(甭客气!尽情的扫描或者长按!)