news 2026/6/23 12:35:46

稳定性(二):ANR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
稳定性(二):ANR

组件类 ANR

  • 当 AMS 通过 Binder 向应用进程派发跨进程任务时,系统会同步启动一个倒计时器(例如针对 Service 启动的 20 秒阈值),这一“埋炸弹”机制实质上将异步任务转化为带有超时约束的同步契约。应用进程在完成任务后必须通过 Binder 回调主动“拆弹”
  • AMS 利用 MainHandler 发送延迟消息实现精确计时
  • Android 15 对后台服务施加了更严格的约束:前台服务必须在 3 秒内完成初始化并调用 startForeground(),否则系统将直接触发 ANR。

Input 类 ANR

  • InputDispatcher 会通过 socket 与窗口建立事件通道,并在事件派发后启动超时检测。
  • 当事件被分发后,系统通过 MonitoredTimeout 机制跟踪其处理状态。
  • 默认超时时间为 5000 毫秒(可通过系统属性调整),超时检测采用事件驱动模式,在新事件到达、应用回调完成或周期性心跳检查时触发。
  • 一旦检测到超时,系统会通过 WindowManagerService 通知 ActivityManagerService,并收集包括 InputDispatcher 状态及应用进程信息在内的诊断数据,随后可能触发 ANR 弹窗及进程重启流程。
  • input事件5秒之内再次有事件才会ANR,如果没有不会弹窗

常见原因

综述:

  • 任何的耗时操作
  • 线程:阻塞 死锁
  • 资源不够:自身消耗 不能释放 系统分配

细分:

  • Binder 通信数据量过大
  • service binder 的数量达到上限
  • SystemServer Binder 锁竞争太多,导致等锁超时
  • 频繁 GC 触发 STW 导致主线程暂停,处理事件时间被拉长
  • 大量 SharedPerference 同时读写
  • SurfaceFlinger 超时
  • System Server 中 WatchDog 出现 ANR
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 11:20:51

Spark-TTS实战指南:零基础搭建智能语音合成系统

Spark-TTS实战指南:零基础搭建智能语音合成系统 【免费下载链接】Spark-TTS Spark-TTS Inference Code 项目地址: https://gitcode.com/gh_mirrors/sp/Spark-TTS 还在为传统TTS系统部署复杂、语音生硬而烦恼吗?Spark-TTS将彻底改变你对语音合成的…

作者头像 李华
网站建设 2026/6/19 1:31:27

用n8n打造自愈型用例库与质量知识图谱

三年前,我们的测试团队遇到了一个典型痛点:随着产品快速迭代,用例库日益臃肿却难以维护,大量用例失效或重复,测试效率不增反降。更麻烦的是,缺陷分析、需求变更和测试执行之间形成了信息孤岛。直到我们基于…

作者头像 李华
网站建设 2026/6/23 18:59:53

压缩机的精准客户群体都有哪些?

压缩机作为工业领域的“动力心脏”,被广泛应用于气体输送、制冷、自动化等场景,但并不是所有行业都是它的核心客户,要想提高销售效率,必须精准识别真正有刚性需求的群体。1. 制冷与 HVAC 行业空调、冰箱、冷库、冷链物流等都依赖制…

作者头像 李华
网站建设 2026/6/23 6:16:41

Topit窗口置顶神器:彻底告别Mac多任务窗口遮挡烦恼

Topit窗口置顶神器:彻底告别Mac多任务窗口遮挡烦恼 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为频繁切换窗口而打断工作思路吗&#xff1f…

作者头像 李华