APP开发经验总结android技术专栏Android 技术开发

Android-程序ANR产生的原因与解决思路

2017-10-09  本文已影响125人  大博同学

ANR:即Appliaction Not Responding,在Android设备上,如果应用程序进程的主线程响应超时就会产生ANR,系统就会向用户展示一个提示框,用小米设备举例,基本提示内容为:“应用程序未响应”下面有两个按钮,一个是等待,一个是强制关闭。

ANR的常见类型为:

1.KeyDispatchimeout(5 seconds) 主要类型,案件或触摸事件在特定时间内无响应
2.BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成
3.ServiceTimeout(20 seconds) 小概率类型Service在特定的时间内无法处理完成

什么情况下会引发ANR:

1.应用进程的主线程,在五秒内没有响应事件(如:按下按钮没有响应)
2.BroadcastReceiver在10秒内没有执行完毕
3.应用进程的主线程在执行Service的各个生命周期函数时20s内没有处理完毕

造成以上情况的大致原因基本上就是主线程中存在耗时操作,或者线程阻塞、挂起、死循环等,当然也存在其他外在因素,比如cpu使用过高,或者文件读写频繁等等都会导致ANR的产生。

如何避免ANR的出现:

主线程如果需要做耗时操作时需要启子线程进行处理(如:网络请求、数据库操作等)
BroadcastReceiver中如果有耗时操作,可以放到service中处理

上一篇下一篇

猜你喜欢

热点阅读