全称:
Application for Responding(应用程序无响应)
原因:
- 当前的事件没有机会得到处理,例如UI线程正在响应另外一个事件,当前事件由于某种原因被阻塞了。
- 当前的事件正在处理,但是由于耗时太长没能及时完成
ANR定位和分析:
可以通过结合Logcat日志和生成的位于手机内部存储的/data/anr/traces.txt文件进行分析和定位。
adb shell
cd data/anr
ls
此时可以查看到目录下所有的traces.txt 文件
通过(Ctrl +D )退出 adb shell
然后执行导出命令:adb pull /data/anr/traces.txt D:\traces\mytraces.txt
此处 D:\traces\mytraces.txt为导出目标位置。
ADB环境配置:
1.在环境变量-系统变量下新增:
变量名:android
变量值:D:\xyd\android-tools\android-sdk\platform-tools (sdk下工具目录)
2.在path后面添加%android%; 若前面没;需要添加;
3.在命令行中输入adb有提示则配置成功
ANR的避免和检测
避免在主线程中作耗时操作。
检测工具:
StrictMode:严格模式StrictMode是Android SDK提供的一个用来检测代码中是否存在违规操作的工具类。主要检测两类问题:
线程策略ThreadPilicy,虚拟机策略VmPolicy。
BlockCanary:是一个非侵入式的性能监控函数库,用法和LeakCanary类似。只不过后者监控应用的内存泄漏,而BlockCanary监控应用主线程的卡顿。