1 ANR 原因分析及解决方法 (技术文档) 2 内容目录1 ANR是 如 何 产 生 的 ............................................................................................................................ 5 1.1 ANR产 生 条 件 ..................................................................................................................... 5 1.2 引 起 ANR的 根 本 原 因 ............................................................................................................ 5 2 ANR原 因 分 析 方 法 ............................................................................................................................ 5 2.1 通 过 logcat日 志 分 析 原 因 ....................................................................................................... 5 2.2 通 过 trace文 件 分 析 原 因 ......................................................................................................... 9 3 ANR解 决 方 法 ................................................................................................................................ 12 4 参 考 资 料 ......................................................................................................................................... 12 3 1 ANR 是如何产生的 1.1 ANR 产生条件 ANR 的产生需要同时满足三个条件: 主线程:只有应用程序进程的主线程响应超时才会产生ANR; 超时时间:产生ANR 的上下文不同,超时时间也不同,但只要超过这个时间上限没有响应就会产生ANR; 输入事件/特定操作:输入事件是指按键、触屏等设备输入事件,特定操作是指BroadcastReceiv er 和Serv ice 的生命周期中的各个函数调用。 产生ANR 的上下文不同,导致ANR 原因也不同,主要有以下三种情况: 应用进程的主线程对输入事件在5s 内没有处理完毕; 应用进程的主线程在执行BroadcastRecev ier 的 onReceiv e 函数时10s 内没有处理完毕; 应用进程的主线程在执行Serv ice 的各个生命周期函数时20s 内没有处理完毕; 1.2 引起ANR 的根本原因 引起ANR 的根本原...