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

字数 367阅读 464

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

ANR的常见类型为:

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

什么情况下会引发ANR:

  • 在Android中应用程序的响应是靠Activity Manager和WindowManager系统服务监视的,当检测到以下情况中的一个时就会针对特定的应用程序显示ANR

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

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

如何避免ANR的出现:

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

推荐阅读更多精彩内容