Android 使用 Debug.startMethodTracing 分析方法耗时

参考 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毫秒。

相关推荐
Java资深爱好者3 小时前
Android中的AsyncTask。
android
tangweiguo030519873 小时前
android 支持自定义布局、线程安全、避免内存泄漏的 Toast 工具类
android·toast
Goober Airy4 小时前
PHP:无框架、不配置服务器,仅利用URL规则设置路由
android·java·服务器·php
JasonAndChen5 小时前
Android Studio 一直 Loading devices
android·安卓
顾林海7 小时前
深入探索Android IPC:解锁进程间通信的奥秘
android
etcix10 小时前
todo: 使用融云imserve做登录(android)
android
ljx140005255012 小时前
Android AudioFlinger(二)——AndroidAudio Flinger的启动流程
android·java
Wgllss12 小时前
该怎么学Android进阶,拒绝沦为高级三方SDK调用工程师?
android·架构·android jetpack
工程师老罗14 小时前
用DeepSeek学Android开发:Android初学者遇到的常见问题有哪些?如何解决?
android
居然是阿宋14 小时前
理解 UDP 协议与实战:Android 使用 UDP 发送和接收消息
android·网络协议·udp