图(1)
2.png
图(2)
7.png
参数 | 说明 |
---|---|
Inl Cpu Time% | 方法执行占用时间的百分比(CPU时间) |
Incl Cpu Time | 方法(包括调用子方法)执行占用时间(CPU时间) |
Excl Cpu Time% | 方法自身执行占时间的百分比(CPU时间) |
Excl Cpu Time | 方法自身执行占用的时间 (CPU时间) |
Incl Real Time% | 方法实际执行占用时间的百分比 |
Incl Real Time | 方法实际执行(包括调用子方法)占用时间 |
Excl Real Time% | 方法自身实际执行占用时间的百分比 |
Excl Real Time | 方法自身实际执行占用时间 |
Calls+RecurCalls/Total | 方法被调用的次数+重复调用次数(Calls为当前方法中的调用次数,RecurCalls为递归调用次数,Total当前方法中的总调用次数,包括子方法中的调用次数) |
Cpu Time/Call | 方法每次被执行的时间 |
Real Time/Call | 方法真正被执行的时间 |
Real Time = CPU Time + Wait Time
package com.example.traceviewdemo;
import android.os.Bundle;
import android.os.Debug;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
/**
* Author : eric
* CreateDate : 2017/3/23 18:00
* Email : ericli_wang@163.com
* Version : 2.0
* Desc :
* Modified :
*/
public class TraceViewTestActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_traceview);
//开始trace
Debug.startMethodTracing("test");
new Thread() {
@Override
public void run() {
super.run();
int i = 100;
while (i >= 0) {
i--;
log("count " + i);
SystemClock.sleep(10);
}
}
}.start();
for (int i = 0; i < 100; i++) {
log("main " + i);
}
}
private void log(String content) {
Log.d("eric", content);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束trace
Debug.stopMethodTracing();
}
}
1.png
展开topLevel
4.png
看到第一行数据0(topLevel),topLevel包含整个trace周期。Incl Cup Time% 为100% 实际消耗cpu时间为1539.420。展开后看到在这个trace周期中,第一层所调用的方法。如:performStart() 最终会调用到onStart()方法,包括代码中启动新
的线程Thread.start()
,打印日志方法TraceViewTestActivity.log
5.png
6.png
通过上面简单的描述,我们已经完全可以学会如何使用traceView和数据分析。但是上面有很多的指标,很多的方法,我们需要如何快速精准的找到我们app中出现性能的问题。
Debug.startMethodTracing("test");
和Debug.stopMethodTracing();
则生成的文件在 sd卡根目录下test.trace。然后是有adb pull 拷贝出来。
使用代码生成.trace时候注意要加入SD卡写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />