1.1. apk函数耗时分析工具TraceView
Traceview是android平台配备的一个很好的性能分析工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。进行Traceview的版本限制,对于Android 1.5及以下的版本:不支持。
对于Android 1.5以上2.1下(含2.1)的版本:受限支持。trace文件只能生成到SD卡,且必须在程序中加入代码。对于Android 2.2上(含2.2)的版本:全支持。可以不用SD卡,不用在程序中加代码,直接自己用DDMS就可以进程Traceview。主要有两种办法, 一种是需要加有对应apk的source code, 另外一种是不需要source code, 只需要利用ddms里面的工具就可以.
一、Android 1.5以上2.1下(含2.1)的版本中Traceview的使用
首先,必须在程序当中加入代码,以便生成trace文件,有了这个trace文件我们才可以将其转化为图形。
1.1、启动追踪
使用Debug的以下静态方法方法来启动:
static void startMethodTracing(String traceName)
Start method tracing, specifying the trace log file name.
使用指定trace文件的名字和默认最大容量(8M)的方式开始方法的追踪
static void startMethodTracing()
Start method tracing with default log name and buffer size.
使用默认trace文件的名字(dmtrace.trace)和默认最大容量(8M)的方式开始方法的追踪
static void startMethodTracing(String traceName, int bufferSize, int flags)
Start method tracing, specifying the trace log file name and the buffer size.
使用指定trace文件的名字和最大容量的方式开始方法的追踪。并可指定flags.
注:int flags好像没意义。一般都用0.
static void startMethodTracing(String traceName, int bufferSize)
Start method tracing, specifying the trace log file name and the buffer size.
使用指定trace文件的名字和最大容量的方式开始方法的追踪。
注1:以上的方法的文件都会创建于SD卡下,即”/sdcard/”下,对默认文件名的就是”/sdcard/dmtrace.trace”
如果没SD卡,以上方法会抛异常致使程序crash.
注2:如果文件名没有指定类型,系统为其加上类型.trace
1.2、停止追踪
使用Debug的静态方法方法来停止:
public static void stopMethodTracing ()。
例如在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),
如下:
@Override
public void onCreate(Bundle savedInstanceState) {
Debug.startMethodTracing();
super.onCreate(savedInstanceState);
//something else
}
protected void onDestroy() {
super.onDestroy();
// do something else……………..
Debug.stopMethodTracing();
}
1.3、从target board里面取出trace文件, 比如可以使用 adb pull 命令把文件copy出来, 或者直接利用U盘把对应的trace文件copy出来. 然后使用android sdk自带的traceview 来进行分析. 在win7平台需要进入android sdk 的tools目录, 然后执行 traceview.bat xxx.trace, 就可以看出图形界面, 就可以看出具体时间cost在哪些地方.
1.4、分析图形结果, 看出具体时间耗在什么地方, 如下我在nike2平台上面分析konka系统设置第一次启动耗时的问题,可以看出主要时间在
可以看出1 函数cost 2719ms, 22 cost 1482ms, 然后可以编辑具体的比如22 进去, 就可以看到细节.
可以看出在函数 sysrootapp里面飞了 1482ms.
二、eclipse工具直接分析
2.1, 打开ddms,
比如此处选中 com.miui.mihome2这个进程, 然后点击红色画圈处, start method profiling, 然后开始进行一些操作,在做完你所需要分析的动作之后, 就可以然后再次点击红色圈圈处, stop method profiling, 这个时候就会自动进入第一类里面的图形界面, 然后进行分析就ok了.
三、 apk 启动时间分析
这个是对于apk启动性能调优的一个方法, 比如需要优化apk启动时间, 当然也可以采用上面的第一种方法来做, 但是这个需要更改source code, 而且第二种方法不是用第一次启动这种动作, 因为如果没有这个process的时候, 没有办法进行上面的方法.
这个时候可以利用command:
am start –n com.konka.systemsetting/.MainActivity –P /data/oprofile
通过这种办法启动应用, 就可以在apk启动的过程中在指定的目录生成trace文件, 然后取出trace文件进行分析就ok了. 具体分析方法不赘述.