参考 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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//save to ./data/media/0/Android/data/com.test.luodemo/files/dmtrace.traceDebug.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毫秒。