一、ANR介绍
ANR 由消息处理机制保证,Android 在系统层实现了一套精密的机制来发现 ANR,核心原理是消息调度和超时处理。ANR 机制主体实现在系统层,所有与 ANR 相关的消息,都会经过系统进程system_server调度,具体是ActivityManagerService服务,然后派发到应用进程完成对消息的实际处理,同时,系统进程设计了不同的超时限制来跟踪消息的处理。 一旦应用程序处理消息不当,超时限制就起作用了,它收集一些系统状态,譬如 CPU/IO 使用情况、进程函数调用栈 CallStack,(有些平台比如 MTK,还会打印相应的 Message 出来供调试分析),最后报告用户有进程无响应了( ANR 对话框)。
1.1、ANR类型
ANR 一般有三种类型:
1.1.1、KeyDispatchTimeout
这个主要是按键或触摸事件在特定时间内无响应,一般 Android 平台默认超时时间是 5s 会报 anr,不过有些平台会修改这个时间,比如 MTK 有些平台就是 8s 的超时时间。
这个超时时间可以在 ActivityManagerService.java 查看:
本文详细介绍了Android ANR(Application Not Responding)的三种类型:KeyDispatchTimeout、BroadcastTimeout和ServiceTimeout,以及它们的超时时间和原理。ANR的分析关键在于log和traces.txt文件,通过分析CPU使用率和线程状态来定位问题。减少ANR发生的方法包括避免主线程的耗时操作,合理使用异步处理和线程优先级设置。
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



