Android性能优化:ANR异常处理

Android性能优化:ANR异常处理_第1张图片

ANR(Application Not Responding)应用程序无响应

导致ANR异常的原因很多:

InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件

BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒

Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕

ContentProvider Timeout :ContentProvider的publish在10s内没进行完 (以上四条是复制网上总结,感觉总结很到位)

相信大家在开发中偶尔也会碰到此类问题,此文章重点介绍如何追踪查找错误

制造ANR

非常简单,一个页面两个按钮设置点击事件,一个调用Thread.sleep(50000),另一个点击修改页面布局

ANR追踪分析

1,AndroidStudio Logcat查看

通过查看Logcat的方法只能看一个大概,告诉你主线程等待异常;

2,traces.txt

app每次出现anr异常,系统都会记录到手机的traces.txt文件中,所以,出现anr可通过查看traces.txt追踪异常;

对adb不了解的可先看下Android adb shell 常用命令https://www.cnblogs.com/abeam/p/8908225.html

配置好adb以后查找traces.txt文件(声明:不需要root)

window + R ,输入cmd 打开命令窗口:

①adb shell  (链接设备)

②cd /data/anr  (进入/data/anr目录下)

③ls (查看当前目录下文件)

④ctrl + d 退出

⑤adb pull data/anr/traces.txt c:\anr  (可将文件导入到c盘anr文件中,如果出现以下异常,需按照另外一种办法解决)

Android性能优化:ANR异常处理_第2张图片

出现这种异常需使用另外一个命令导出

//6.0及以下设备
adb bugreport > bugreport.txt
//7.0及以上设备
adb bugreport bugreport.zip

压缩成功,可以先查看以下,然后导出:

Android性能优化:ANR异常处理_第3张图片

然后到电脑C盘anr文件夹中解压压缩包,找到  FS文件夹  ---->    data文件夹    ---->    anr文件夹

Android性能优化:ANR异常处理_第4张图片

打开查找anr异常

Android性能优化:ANR异常处理_第5张图片

Android性能优化:ANR异常处理_第6张图片

可精准定位到异常;

其实造成ANR异常的原因很多,主线程阻塞,CPU满负荷,内存不足,还有上面说的各大组件ANR,只能说尽量避免吧!

你可能感兴趣的:(android性能优化)