Android性能优化(TraceView使用)

2017-03-24  本文已影响352人  第八区

TraceView工具介绍

图(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 方法真正被执行的时间
CPU Time组成

Real Time = CPU Time + Wait Time

trace文件生成(代码生成)

示例代码
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();
    }
}
导出.trace文件
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中出现性能的问题。

上一篇 下一篇

猜你喜欢

热点阅读