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

作者: 大博同学 | 来源:发表于2017-10-09 15:58 被阅读125次

    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中处理

    相关文章

      网友评论

      本文标题:Android-程序ANR产生的原因与解决思路

      本文链接:https://www.haomeiwen.com/subject/qrdpyxtx.html