TraceView使用记录

性能优化相关的东西真的不太好理解!
慢慢来吧。今天使用TraceView来实际看一些东西。
代码如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Debug.startMethodTracing();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = findViewById(R.id.textView);
        Log.d("kaijun", "onCreate: ");
        mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("kaijun", "onClick: -----");
                Intent intent = new Intent();
                intent.setComponent(new ComponentName("com.kaijun.compareapplication","com.kaijun.compareapplication.MyService"));
                bindService(intent, mSc, Context.BIND_AUTO_CREATE);
            }
        });

        waitForTenminute();

        Debug.stopMethodTracing();
    }

如下为waitForTenminite方法的实现:

    public void waitForTenminute() {
        try {
            Thread.sleep(10000);
            Log.d("kaijun", "waitForTenminute: ----------------");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

重点关注我们的:

 Debug.startMethodTracing();
 Debug.stopMethodTracing();

代码确定之后,我们直接启动应用,然后到如下目录获取trace文件:
/sdcard/Android/data/com.xxx.xxxxx/files/dmtrace.trace
然后把这个文件直接拖到Android Studio打开:
在这里插入图片描述
我们看一下细节:
在这里插入图片描述
第一看到这个地方,我的反应是一个顺序调用。但是仔细看才发现,这个地方是按照时间消耗的多寡来排序的。我们自己写的耗时方法waitForTenminute是排在第一位的。具体耗时:
在这里插入图片描述
可以看到,waitForTenminute方法执行总耗时是10000662,其中sleep时间是10000319,打印日志,也就是执行Log.d的时间是307.
所以,这里我们可以看一幅图,更加明确告诉你其中的各个数值的意义:
在这里插入图片描述
各个方法对应关系如下:

fun A(){
    B();
    D();
}
fun B(){
    C();
}
fun D(){
    C();
    B();
}

也就是说,如果你在一个代码块前后追加了如下日志:

 Debug.startMethodTracing();
 Debug.stopMethodTracing();

我们直接可以看到这段代码逻辑调用的每个方法以及其中的子方法的耗时。
当然,据说,用TraceView会将方法的执行时间给夸大,可能会误导我们优化的方向。所以呢,我们作为一种参考就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值