写点什么

Android ANR 应用无响应

用户头像
W🌥
关注
发布于: 3 小时前
ANR 全称

Application not ResPonding

ANR 原因

Android 系统中,ActivityManagerService 和 WindowManagerService 会检测 App 的响应时间。如果 App 在特定时间无法响应屏幕触摸或键盘输入事件,或者特定事件没有处理完毕,就会出现 ANR。

ANR 本质是一个性能问题。ANR 机制实际上对 App 主线程进行限制,要求主线程在限定的时间内处理完一些操作。若处理超时,则认定主线程已经失去了响应其他操作的能力。主线程中的耗时操作,比如密集 CPU 运算,大量 IO、复杂界面布局等,都会降低应用程序的响应能力。

ANR 出现场景

AppErrors.appNotResponding()是弹出 ANR 对话框的唯一出口,调用该方法的场景才会有 ANR 提示。故调用该方法的场景会导致 ANR:

  • 5 秒内无法响应屏幕触摸事件或键盘输入事件

  • 前台服务 20 秒,后台服务 200s 内没有执行完毕

  • 执行前台广播的 onReceive 函数时,10s 内没有处理完成;后台 60s

  • ContentProvider 的 publish 在 10s 内没有完成

如何避免 ANR

  • UI 线程尽量只做跟 UI 相关的工作

  • 耗时的工作放入单独的线程处理

  • 尽量用 Handler 来处理 UI 线程和其他线程的交互

分析 ANR 的侧重点
  • CPU 占用率方面

  • 内存方面

用户头像

W🌥

关注

还未添加个人签名 2021.08.04 加入

还未添加个人简介

评论

发布
暂无评论
Android ANR应用无响应