1.ANR的定义:
ANR :Application Not Responding,应用无响应,当操作在一段时间内使用系统无法处理时,系统层面会弹出应用程序无响应对话框。(一个流畅合理的程序中不 能出现该对话框,所以响应性能的设计很重要,这样系统才不会显示该对话框给用户)
2.通俗的来讲:android手机,为了不让手机卡的不成样子,还想让用户知道,就发明了ANR弹框。弹框就弹框,一般的继续等待都是无果,只有结束之才能解决。就像电脑卡死之后,任务管理器启动不起来,想禁止某个进程,徒劳无返。
3.所有android设计了一种机制,认为一些阻挡它生命周期的返回,不能无极限下去
4.系统都设计了哪些ANR:
KeyDispatchTimeout(5 seconds) –主要类型
按键或触摸事件在特定时间内无响应
BroadcastTimeout(10 seconds)
BroadcastReceiver 在特定时间内无法处理完成
ServiceTimeout(20 seconds)
Service 在特定的时间内无法处理完成
5.第一种情况是主要情况, 而服务相应超时是小概率类型:虽然服务是在后台执行的,但是它是运行在主线中的,如果处理一些耗时操 作,也会造成 ANR。
2.如何定位是前端问题还是后台问题
1.首先确定是界面问题还是功能性问题
如果是界面问题,如文字错误,样式错误,等,则需要截图
如果时功能问题,控制台的问题至少定位到www的问题还是数据库问题,如果是www问题至少要定位到是前端还是后端问题;如果是数据库问题至少要定位到 是服务端接口问题还是中间件问题。
2.前端bug主要分为3个类别:HTML、CSS、Javascript三类问题
最大的区别方法:
出现样式的问题基本都是CSS的bug
出现文本的问题基本都是html的bug
出现交互类的问题基本都是Javascript的bug
3.我们可以从接口url是否正确,传参是否正确,如果是接口URL,传参不正确,解释前端问题;
后端问题:响应是否正确,如果不正确,就是后台不正确,具体判断是不是后端的问题。我们可以查看报错日志,通过日志分析问题,可以查看数据库确认数据的正确性,也可以查看缓存是否正确