文章目录
什么是ANR
ANR:Application NotResponding
在Android中,如果应用程序在某一段时间内响应不够灵敏,系统就会向用户显示一个对话框,这个对话框就叫作应用程序无响应对话框。
很多时候,用户并不希望处理这个对话框,因为这样带给用户的体验是很差的。所以,在应用程序中,我们应该注意设计好程序的响应性能,使得用户在使用app时,系统不会显示ANR给用户。
在Android中,不同组件发生ANR的时间不同,比如,Activity是5秒,BroadcastReceiver是10秒,Service是20秒。
导致ANR的可能原因
可以通过查看/data/anr/traces.txt文件获取发生ANR的相关信息。
可能原因有:
1、主线程被IO操作阻塞(4.0之后网络IO操作不允许在主线程中进行)。
2、主线程中存在耗时的计算。
3、主线程中错误的操作,比如调用Thread.wait()或者Thread.sleep()时,系统会监控程序的响应状况,一旦出现4、5、6的情况,就会弹出ANR对话框。
4、应用程序在5秒内未响应用户的输入事件。
5、BroadcastReceiver未在10秒内完成相关的处理。
6、Service在特定的时间内(20秒)无法处理完成。
如何避免ANR
1、使用AsyncTask处理耗时IO操作。
2、使用Thread或者HandlerThread时,调用Process.setThreadPriority(Pr