Android ANR 机制

Android ANR 机制,第1张

广播的 ANR 处理相对简单,主要是再次判断是否超时、记录日志,记录 ANR 次数等。然后就继续调用 processNextBroadcast 函数,处理下一条广播了。

ContentProvider 超时为 CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10s

Activity 的 ANR 是相对最复杂的,也只有 Activity 中出现的 ANR 会弹出 ANR 提示框。

最终的表现形式是:弹出一个对话框,告诉用户当前某个程序无响应,输入一大堆与 ANR 相关的日志,便于开发者解决问题。

InputDispatching:

Activity 最主要的功能之一是交互,为了方便交互,Android 中的 InputDispatcher 会发出操作事件,最终在 InputManagerService 中发出事件,通过 InputChannel,向 Activity 分发事件。交互事件必须得到响应,如果不能及时处理,IMS 就会报出 ANR,交给 AMS 去弹出 ANR 提示框。

KeyDispatching:

如果输入是个 Key 事件,会从 IMS 进入 ActivityRecordTokenkeyDispatchingTimeOut,然后进入 AMS 处理,不同的是,在 ActivityRecord 中,会先截留一次 Key 的不响应,只有当 Key 连续第二次处理超时,才会弹出 ANR 提示框。

窗口焦点:

Activity 总是需要有一个当前窗口来响应事件的,但如果迟迟没有当前窗口(获得焦点),比如在 Activity 切换时,旧 Activity 已经 onPause,新的 Activity 一直没有 onResume,持续超过 5 秒,就会 ANR。

App 的生命周期太慢,或 CPU 资源不足,或 WMS 异常,都可能导致窗口焦点。

1 判断是否有 focused 组件以及 focused Application:

这种一般是在应用启动时触发,比如启动时间过长在这过程中触发了 keyevent 或者 trackball moteionevent 就会出现。

对应于

2 判断前面的事件是否及时完成:

对应于

出现这种问题意味着主线程正在执行其他的事件但是比较耗时导致输入事件无法及时处理。

InputDispatcher 超时是最常见的 ANR 类型,而且其类型也比较多。

当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点, 这便产生了最原生态的内核事件。接着,输入系统取出原生态的事件,经过层层封装后成为 KeyEvent 或者 MotionEvent ;最后,交付给相应的目标窗口(Window)来消费该输入事件。可见,输入系统在整个过程起到承上启下的衔接作用。

Input 模块的主要组成:

每一个应用进程都会有一个 SignalCatcher 线程,专门处理 SIGQUIT,来到 art/runtime/signal_catchercc :

当应用发生 ANR 之后,系统会收集许多进程,来 dump 堆栈,从而生成 ANR Trace 文件。收集的第一个,也是一定会被收集到的进程,就是发生 ANR 的进程。接着系统开始向这些应用进程发送 SIGQUIT 信号,应用进程收到 SIGQUIT 后开始 dump 堆栈。

[1] developer ANRs

[2] Android ANR 分析详解

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

[4] 微信 Android 团队手把手教你高效监控 ANR

[5] Input 系统—ANR 原理分析 - Gityuan

[6] 彻底理解安卓应用无响应机制 - Gityuan

[7] 理解 Android ANR 的触发原理 - Gityuan

NR技术称“断点续传技术”,是种结合本地存储和网络存储的技术,主要用来解决网络失效时的监控丢失问题。如先前所讲,DVS与DVR架构的最大不同在于:DVS通常本身没有监控存储功能,而是必须由后端的NVR来实现监控的存储,因此对于网络稳定性要求很高,网络连接失败、丢包严重、抖动等各种因素部可能造成监控数据的丢失。因此DVS奉身设计存储缓冲区是个好办法,可以保证网络短暂中断的情况下监控数据的连续存储。ANR实质即要求前端(DVS)与后端(NVR)都要具有存储功能,一旦出现网络中断情况,前端的存储可以不受网络的影响,继续进行存储并作为备份数据,后端(NVR)就可以在网络重新接通成功后,将网络失效期间存储在前端DVS缓存区的监控数据以“补充”的方式传输到后端(NVR)。

ANR是港口安特卫普的缩写,英文名是ANTWERP

第一个字母据说代表产地,关于产地的代码,网上能查到很多说法,不过第一个字母究竟代表哪个国家,到目前为止还没有权威解释,都是大家猜测的,也不是国家名称缩写的第一个字母

我手里有一瓶100ml的anr,韩国机场免税店的,批号是D29,made in UK

还有一瓶30ml的毛孔,批号A78,made in USA

一瓶50ml的anr,批号C打头,made in UK

以上就是关于Android ANR 机制全部的内容,包括:Android ANR 机制、硬盘录像机储存设置里启用ANR是什么意思、ANR是哪个国家的缩写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:聚客百科

原文地址: https://juke.outofmemory.cn/life/3681712.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存