ANR 是什么?怎样避免和解决 ANR

发布于 2025-01-08 22:37:32 字数 927 浏览 2 评论 0

ANR:Application Not Responding,即应用无响应

ANR 一般有三种类型:

  1. KeyDispatchTimeout(5 seconds) 主要类型,按键或触摸事件在特定时间内无响应
  2. BroadcastTimeout(10 seconds) BroadcastReceiver 在特定时间内无法处理完成
  3. ServiceTimeout(20 seconds) 小概率类型,Service 在特定的时间内无法处理完成

超时的原因一般有两种:

  1. 当前的事件没有机会得到处理(UI 线程正在处理前一个事件没有及时完成或者 looper 被某种原因阻塞住)
  2. 当前的事件正在处理,但没有及时完成

UI 线程尽量只做跟 UI 相关的工作,耗时的工作(数据库操作,I/O,连接网络或者其他可能阻碍 UI 线程的操作)放入单独的线程处理,尽量用 Handler 来处理 UI thread 和 thread 之间的交互。

UI 线程主要包括如下:

  • Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick()
  • AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel()
  • Mainthread handler: handleMessage(), post(runnable r)

查找 ANR 的方式:

  1. 导出 /data/data/anr/traces.txt ​,找出函数和调用过程,分析代码
  2. 通过性能 LOG 人肉查找

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

梓梦

暂无简介

文章
评论
26 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文