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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,280评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,107评论 19 139
  • 面试题总结 通用 安卓学习途径, 寻找资料学习的博客网站 AndroidStudio使用, 插件使用 安卓和苹果的...
    JingBeibei阅读 5,683评论 2 21
  • 导读:Android面试中高频率出现的题都在这了。试题大部分从互联网收集,博主下了一番功夫进行梳理总结,难免有不足...
    Maat红飞阅读 56,067评论 61 844
  • 第一种写法:(隐藏) [webView stringByEvaluatingJavaScriptFromStrin...
    Hyman0819阅读 1,436评论 0 0

友情链接更多精彩内容