Android traces.txt文件分析
Android的traces.txt文件记录了进程的堆栈情况,对于分析应用响应慢,以及ANR的原因很有帮助。traces.txt文件的位置位于/data/anr/
。
1. traces.txt文件的生成
traces.txt文件会在三种场景下生成:
-
应用响应慢
-
发生ANR
-
WatchDog的监视没有得到回馈
1.1. logAppTooSlow
对于应用响应慢的情况有:
-
Activity执行
protected void onPause()
方法超时.Android规定的pause响应时间为500毫秒:static final int PAUSE_TIMEOUT = 500;
,这个定义位于frameworks/base/services/java/com/android/server/am/ActivityStack.java
-
Activity启动慢。在ActivityManagerService 启动一个Activity的时候,就会开启定时器,如果500毫秒还没有启动完毕,就会调用logAppTooSlow方法
但是值得注意的是,logAppTooSlow只用于开发版本,在正式的release是不会产生app slow的traces文件的。
final void logAppTooSlow(ProcessRecord app, long startTime, String msg) {
if (true || IS_USER_BUILD) {
return;
}
……
}
因为在logAppTooSlow的方法开头,就直接返回了,所以需要我们修改这个判断条件,让代码能够顺利的执行。由此可见,判断app执行过慢,是开发阶段的事情。这也为在开发阶段解决系统性能提供了一个手段。logAppTooSlow的trace信息保存在slowxx.txt文件中,xx代表编号,从01一直到08,最多有9个这样的文件。
logAppTooSlow的运行逻辑:
-
首先判断
/data/anr/traces.txt
是否存在,如果存在就将其更名为临时文件/data/anr/__temp__
-
然后调用dumpStackTraces往
/data/anr/traces.txt
文件中写入traces信息 -
对/data/anr目录下面已经存在的文件进行移位覆盖。比如原先目录下面有一个文件