简介:
ANR全称Application No Responding,是Android常见且要尽量避免的一类错误,那么,定位ANR分析并解决它,就成了一个Android开发工程师必备的能力了。
一、ANR产生的原因。
1.只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有2种。
● 当前的事件没有机会得到处理
● 当前的事件正在处理,但是由于耗时太长没能及时完成
二、ANR的分类(三种)。
1.KeyDispatchTimeout:最常见一种类型,原因是View的按键事件或触摸事件在5秒内无法得到响应。
2.BroadcastTimout:原因是广播接收者(BrocastReceiver)的onReceive()函数在特定时间内(10秒)无法完成处理。
3.ServiceTimeout:原因是服务(Service)的各个声明周期函数在特定时间(20秒)内无法完成处理。
三、典型的ANR问题场景。
1.应用程序UI线程存在耗时操作,例如在UI线程中进行网络请求,数据库操作或者文件操作等,可能会导致UI线程无法及时处理用户输入等。
2.应用程序UI线程等待子线程释放某个锁,从而无法处理用户的请求的输入。
3.耗时操作的动画需要大量的计算工作,可能导致CPU负载过重。
四、ANR的定位和分析。
1.LogCat日志信息。
2.手机内部的traces.txt文件(位于/data/anr/)。