经常可以在Android系统上发现ANR异常响应的问题。故了解一下ANR出现的原因

一、

Android系统中,应用程序的响应是由ActivityManager 和 WindowManger系统服务监视的,当它检测到以下情况时,Android就会针对特定的应用程序显示ANR:

1.      主线程超过5S没有响应输入事件。(主要类型)KeyDispatchTimeout(5 seconds)

2.      BroadcastReceiver 没有在10S 内返回。例如发送广播更改“控件属性”超过10S无效

3.      Service在20S 内没有无法完成处理(小概率)

二、

什么是主线程(UI线程):

当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。

三、

为什么UI线程没有响应:

1.      当前的事件没有机会得到处理

2.      当前的事件正在处理,但是没有及时完成

四、

如何避免ANR:

1.      运行在主线程里的任何方法都尽量少的做事情,特别是Activity的关键生命周期方法,再更新UI时尽量用handler进行。

2.      避免在BroadcastReceiver中做耗时的操作或者计算,如果响应广播时要做耗时操作的话可以使用“service”来进行。

五、

容易出现ANR的场景:

1.      耗时的网络访问

2.      大量的数据库读写操作

3.      系统硬件操作

4.      调用thread_join() / Sleep() / Wait() 或者等待locker的时候

5.      同时运行的Service binder达到上线(binder主要是用来进程间通信的,但也可用在和本地service通信)

6.      Service响应超时

7.      非主线程持有lock,导致主线程等待lock超时

8.      非主线程终止或者崩溃导致主线程一直等待

转载于:https://www.cnblogs.com/liuchunxiao83/p/7986993.html

Android ANR原因以及开发时如何预防相关推荐

  1. 用Android+Mysql workbench开发时出现Field ‘id**‘ doesn‘t have a default value错误

    用Android+MySQL Workbench进行开发时,调试出现Field 'id**' doesn't have a default value的错误,网上查阅了一些文章,说是数据库表id主键没 ...

  2. android anr 产生的类型及原因

    android anr 产生的条件 android 系统中anr的本质是主线程无法响应.而导致主线程无法响应的原因大致如下: 主线程请求网络资源,数据库访问或者io访问,这些操作都是耗时操作,主线程处 ...

  3. android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关

    这篇博客主要是用来记录平时开发时遇到的各种问题,给大家一个参考,也可以跟大家一起讨论讨论. Android双模(CDMA/GSM)手机短信相关 参考博客http://blog.sina.com.cn/ ...

  4. 使用java做paypal开发时购买东西支付不成功的原因

    使用java做paypal开发时购买东西支付不成功的原因 没有设置网站习惯设定,登陆自己的paypal账户,在网站习惯设定上填写回调的url路径,这样就可以 支付成功了并且异步修改订单的状态. 支付成 ...

  5. android 添加通讯录联系人头像,Android 手机通讯录开发时给联系人添加头像失败的坑...

    Android 手机通讯录开发时给联系人添加头像失败的坑,在给联系人添加头像代码 Bitmap photo = ...; // 将 Bitmap 转为 byte[] byte[] bytes = Ls ...

  6. Android ANR 搜集

    Android ANR排查 应用层一般如下情况下需要查看log 1) 程序异常退出 , uncaused exception 2) 程序强制关闭 ,Force Closed (简称FC) 3) 程序无 ...

  7. 看完这篇 Android ANR 分析,就可以和面试官装逼了!

    点击上方"何俊林",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 本文转载自公号玉刚说,原创作者htkeepmoving,原文链接:https://www.jianshu ...

  8. Android:ANR问题是什么和如何避免

    文章目录 前言 一.ANR是什么? 二.ANR时间规定 1.Service Timeout 2.BroadcastQueue Timeout 3.ContentProvider Timeout 4.I ...

  9. Android ANR 问题第二弹------Input超时实战问题解析上

    在前面的Android ANR 问题第二弹一文中,我们简诉了Android Input超时的原因,我们了解到系统Input系统分发Input的事件时如果有5s超时会触发应用ANR.在实际开发测试中,我 ...

  10. Android ANR

    ANRs ("Application Not Responding"),意思是"应用没有响应". 1)什么引发了ANR? 在Android里,应用程序的响应性是 ...

最新文章

  1. 机器学习实战 k-近邻算法 使用matplotlib创建散点图
  2. 掌握房贷技巧可让你少奋斗十年(收藏)
  3. numpy.ma详解
  4. adsense三种广告要屏蔽
  5. Spring Boot集成Swagger
  6. hadoop集群安装配置
  7. 重启VirtualBox里面的系统提示VT-x features locked or unavailable in MSR错误
  8. RemObjects Remoting SDK-SEO狼术
  9. java集合练习题_「集合练习题」Java集合框架篇-58-集合框架的几个练习题 - seo实验室...
  10. ceph修改osd服务器IP,ceph增加osd流程
  11. mysql简历上怎么写_新手程序员简历应该怎么写?
  12. 谷歌浏览器导致电脑右下角莫名弹出广告解决办法
  13. latex参考文献bib基本格式_Latex如何添加参考文献——使用bib
  14. 如何舒服的在电视上操作电脑
  15. 【实验】阿里云大数据助理工程师认证(ACA)- 机器学习实现基本统计分析
  16. 启动RocketMQ报错:Please set the JAVA_HOME variable in your environment, We need java 64
  17. 不可或缺的LTO磁带存储
  18. Ubuntu16使用小米WIFI做为AP
  19. android ndk neon,Android NDK开发之 NEON使用介绍
  20. js 页面高度 页面宽度

热门文章

  1. 4亿线上用户性能保证:Linked Redliner架构解密
  2. *第八周*数据结构实践项目一【建设顺序串算法库】
  3. plsql developer无法识别32位oracle问题如何解决?
  4. 【基础练习】【区间DP】codevs1090 加分二叉树题解
  5. Linux必学的60个命令【转载】
  6. Json 转换 1 转成 true 0 转成false
  7. 防雷探测器在建筑物中的要求
  8. PyPI可以使用的几个国内源
  9. [转]Mysql FROM_UNIXTIME as UTC
  10. VMware Vsphere 6.0安装部署 总体部署架构