Android ANR错误的原因以及解决方法(Application Not Responding)
来源:互联网 发布:ps软件放大 编辑:程序博客网 时间:2024/05/16 03:57
一. ANR (Application Not Responding)是什么:
二.ANR出现的原因:
- 按键或触摸事件 5s 内无响应;
- BroadcastReceiver 10s 内无法处理完成;
- Service 在 20s 时间内无法处理完成;
发生 ANR 基本上都会出现无法响应对话框,除了一些后台程序的 ANR,造成 ANR 的原因很多,比如:
- UI 主线程被其他操作阻塞;
- 主线程存在耗时操作(本地 IO操作、网络访问、循环等);
三.如何分析ANR
1、CPU 问题
- 在 Monkeylog.log 文件中定位到 "anr in" 位置,查看 cpu usage total 占用,如发现接近100%,暂时判断为 cpu 问题。
- 然后在 logcat.log 文件中定位到 "not responding" 发生时间,并截取
cpuinfo.log 中时间点前后 5s 的 log,然后计算 CPU 占中,看哪个进程用的多,在酌情分析模块的 CPU 占中。
2、GC 问题
定位到 logcat.log 文件中 "not responding" 发生时间点;
去查看发生 ANR 时间点对应的 trace 文件,定位到应用报名,若Dalvik Thread主线程显示“SUSPENDED”,则为内存问题。
截取 ANR 发生时间点前 5s 的 log,分析 "dalvikvm" 打印的 Paused GC 耗时,如果过多则定位为 GC 问题,需要查看这 5s 件发生了哪些耗时的操作。
注意:发生 GC 的进程 id 需要和当前发生 ANR 的线程 id 的要一致
四.如何避免ANR
- 合理使用 UI 主线程,耗时操作放入其他线程工作;
- 合理使用 Handler 异步消息处理机制来处理其他线程请求。
- 合理使用并遵循 Android 生命周期, 避免在 onCreate() and onResume()做过多的事情;
- 使用一些架构形成规范来避免内存等问题,例如:MVP、RxJava;
- 经常使用工具来检查内存问题,例如:MAT、TraceView、AS 自带等工具;
- 避免加载大图片引起内存不足导致 ANR;
- 避免内存泄露引起的 ANR。
五.总结与额外注意
ANR异常也是在程序中自己经常遇到的问题,主要的解决办法自己最常用的就是不要在主线程中做耗时的操作,而应放在子线程中来实现,比如采用Handler+mesage的方式,或者是有时候需要做一些和网络相互交互的耗时操作就采用asyntask异步任务的方式(它的底层其实Handler+mesage有所区别的是它是线程池)等。
面试可能会问到:如何快速找到ANR的原因
答:Log和trace文件。 (答案仅供参考)
- Android ANR错误的原因以及解决方法(Application Not Responding)
- Android ANR:Application Not Responding
- Android ANR:Application Not Responding
- ANR(Application not responding)的由来以及处理方法
- ANR(Application Not Responding)
- ANR(Application Not Responding)
- ANR:Application Not Responding
- Android ANR(Application Not Responding)定义
- 【Android异常】ANR(Application Not Responding)
- Application Not Responding(ANR)的事件分析
- Android中的ANR(Application Not Responding)问题分析
- 防止android应用程序无响应ANR(Application Not Responding)
- Android中出现ANR(Application Not Responding)
- [RK3288][Android6.0] 系统的ANR(Application Not Responding)
- (转)About ANR (Application Not Responding)
- (转)About ANR (Application Not Responding)
- Android Studio的ADB not responding解决方法
- 避免Application Not Responding (ANR),保持你的程序能够得到响应。
- 最小的K个数
- 机器学习术语:来自《机器学习/周志华》
- 每一天
- C#与Javascript变量、函数之间的相互调用
- 清除浮动的三种方法
- Android ANR错误的原因以及解决方法(Application Not Responding)
- 在ActiveX控件对话框中添加系统自带的ocx控件出现Debug Assertion Failed
- 愚人节的礼物
- 进程和线程的区别
- 无线发射器制作
- 前端对称加密--js对用户名密码进行DES加密
- MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
- 绩点计算
- PBKDF2 算法概述