概述
1.ANR的定义:
ANR:Application Not Responding,即应用无响应 。当操作在一段时间内使得系统无法处理时,系统层面会弹出应用程序无响应对话框。(一个流畅的合理的应用程序中不能出现该对话框,所以响应性能的设计很重要,这样系统不会显示该对话框给用户。)
通俗的来讲:android手机,为了不让手机卡的不成样子,还想让用户知道,就发明了ANR弹框。弹框就弹框,一般的继续等待都是无果,只有结束之才能解决。就像电脑卡死之后,任务管理器启动不起来,想禁止某个进程,徒劳无返。
android设计了一种机制,认为一些阻挡它生命周期的返回,不能无限制下去。比如一个点击触屏动作,android系统就计个时,希望你5s内完成动作,如果你5s还没返回,android系统就会认为你傻了,处理这么久还不返回,android系统就干脆弹个框个,给用户说下,这个过程太长了,你等不等,你最好不要等,把它干掉。
系统都设计了哪些ANR:
1:KeyDispatchTimeout(5 seconds) –主要类型
按键或触摸事件在特定时间内无响应
2:BroadcastTimeout(10 seconds)
BroadcastReceiver 在特定时间内无法处理完成
3:ServiceTimeout(20 seconds)
Service 在特定的时间内无法处理完成
除此之外,还有 ContentProvider,只是一般很少见。
说明:第一种情况是主要情况, 而服务相应超时是小概率类型:虽然服务是在后台执行的,但是它是运行在主线中的,如果处理一些耗时操作,也会造成 ANR。
造成以上情况的首要原因就是在主线程中做了太多的阻塞耗时操作,其次是非主线程的一些原因,举例说明。
由于主线程导致的情况:1、耗时网络操作; 2、当有大量数据读写操作时,再请求数据读写; 3、数据库操作,比如其他大数据量应用访问数据库导致数据库负载过量时;4、 硬件操作, 比如 Camera; 5、调用线程的 Join() / Sleep() / Wait() 或者等待 locker的时候; 6、 Servic binder 数量达到上限; 7、在 system_server 中发生 WatchDog ANR; 8、Service 忙导致超时无响应;
由于非主线程的情况:1、 非主线程持有 lock, 导致主线程等待 lock 超时; 2、 非主线程终止或者崩溃导致主线程一直等待
2.如何定位是前端问题还是后台问题
1.首先要搞清楚前端、后端分别是什么:
前端是用户看得见摸得着的东西,主要体现在页面的视觉效果以及交互设计上。
比如说一个网站的页面风格、页面跳转等,最简单的例子就是一个注册界面:前端设计界面风格,约束输入的字符类型、长度以及合法性校验等,不涉及到与数据库之间的信息交流。
后台,则侧重于更深层面的东西,关于逻辑,关于数据,关于平台的稳定性与性能。
后台主要负责实现具体的功能,举个例子,还是那个注册界面,前端写好了界面,规定了你能输入哪些数据,不能输入哪些数据,而后台则会把你输入的信息与数据库进行比对,如果是新用户,则顺势在数据库中插入一条信息。
当然,关于数据的校验,不同项目情况不同,有些是由前端进行校验,有些是后台,有些是前后台都需要校验。
通常前端与界面相关、布局相关、兼容性相关、交互相关,后端与业务逻辑相关、性能相关、数据相关、安全性相关
知道了前后台的区别,就大致能够进行bug的判断了。
- 我们可以从接口url是否正确,传参是否正确,如果是接口URL,传参不正确,解释前端问题;反之,后端问题。
- 响应是否正确,如果不正确,就是后台不正确,具体判断是不是后端的问题。我们可以查看报错日志,通过日志分析问题,可以查看数据库确认数据的正确性,也可以查看缓存是否正确
最后
以上就是含糊老鼠为你收集整理的ANR的定义以及产生的原因&&如何定位bug是前端问题还是后台问题的全部内容,希望文章能够帮你解决ANR的定义以及产生的原因&&如何定位bug是前端问题还是后台问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复