参考 Generate Trace Logs by Instrumenting Your App
官网提供了 trace 工具来分析方法耗时。
生成 trace 文件
package com.test.luodemo.trace;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Debug;
import android.util.Log;
import com.test.luodemo.R;
public class DebugActivity extends AppCompatActivity {
public static final String TAG = "DebugActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//save to ./data/media/0/Android/data/com.test.luodemo/files/dmtrace.trace
Debug.startMethodTracing();
setContentView(R.layout.activity_debug);
test1();
test2();
Debug.stopMethodTracing();
}
private void test1(){
Log.d(TAG, "test1");
}
/**
* 模拟耗时方法
* */
private void test2(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
- Debug.startMethodTracing(); 启动方法跟踪 。不传参数,默认生成 ./data/media/0/Android/data/<应用包名>/files/dmtrace.trace
- Debug.stopMethodTracing(); 停止方法跟踪。
Debug.startMethodTracing()
可以传入参数,示例,加个时间戳
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//save to ./data/media/0/Android/data/com.test.luodemo/files/dmtrace.trace
//Debug.startMethodTracing();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
Debug.startMethodTracing("luoah-" + logDate);
setContentView(R.layout.activity_debug);
test1();
test2();
Debug.stopMethodTracing();
}
生成文件
trace 文件分析
在 AS 里打开 Device Explorer ,找到生成路径,双击生成的 dmtrace.trace 文件,
很明显,test2() 方法耗时 500毫秒。