ANR的触发
- Broadcast timeout
- Service timeout
- ContentProvider timeout
- InputDispatcher timeout
ANR时都获取了谁的trace
firstPids : ANR 应用的pid, persistent app pid, system_server
extraPids : LRU 链表中,CPU 使用前5的应用
nativePids :
// Which native processes to dump into dropbox's stack traces
public static final String[] NATIVE_STACKS_OF_INTEREST = new String[] {
"/system/bin/audioserver",
"/system/bin/cameraserver",
"/system/bin/drmserver",
"/system/bin/mediadrmserver",
"/system/bin/mediaserver",
"/system/bin/netd",
"/system/bin/sdcard",
"/system/bin/surfaceflinger",
"/system/bin/vold",
"media.extractor", // system/bin/mediaextractor
"media.metrics", // system/bin/mediametrics
"media.codec", // vendor/bin/hw/android.hardware.media.omx@1.0-service
"media.swcodec", // /apex/com.android.media.swcodec/bin/mediaswcodec
"com.android.bluetooth", // Bluetooth service
"/apex/com.android.os.statsd/bin/statsd", // Stats daemon
};
其它的一些tips
- dump trace 的时候,要看reportLatency,如果大于1分钟,只dump自己的trace
- 判断是否是SilentAnr,如果是,则只dump自己
- 读取/proc/stat 和 /proc/pid 节点来统计CPU的使用情况
- 如果是SilentAnr,dump 完trace之后,直接kill 应用,不会弹出error 对话框