导致ANR的几种情况

  • KeyDispatchTimeout(5s): 按键或触摸事件在特定时间内无法处理完成
  • BroadcastTimeout(前台10s,后台60s): 广播在特定时间内无法处理完成
  • ServiceTimeout(前台20s,后台200s): Service在特定的时间无法处理完成 另外还有ProviderTimeout和WatchDog等导致的ANR

应用ANR产生的时候,ActivityManagerService的 appNotResponding方法就会被调用,然后在/data/anr/traces.txt文件中写入ANR相关信息.

ANR就不作介绍了,下面只介绍如何分析ANR异常.

Log分析:

log打印了ANR的基本信息,我们可以分析CPU使用率得知ANR的简单情况;如果CPU使用率很高,接近100%,可能是在进行大规模的计算更可能是陷入死循环;如果CUP使用率很低,说明主线程被阻塞了,并且当IOwait很高,可能是主线程在等待I/O操作的完成.

对于ANR只是分析Log很难知道问题所在,我们还需要通过Trace文件分析stack调用情况.

当APP(包括系统APP和用户APP)进程出现ANR、应用响应慢或WatchDog的监视没有得到回馈时,系统会dump此时的top进程,进程中Thread的运行状态就都dump到这个Trace文件中了.每次发生ANR, 这个文件都会被清空,写入新的内容. 如果想查看以前发生ANR的信息, 可以去查看DB文件.

traces.txt只保留最后一次发生ANR时的信息, android 2.2开始增加了DropBox功能, 保留历史上发生的所有ANR的log.

“/data/system/dropbox”是DB指定的文件存放位置.

日志保存的最长时间, 默认是3天.

SystemServer在启动时, 会创建并添加DROPBOX_SERVICE.

在traces.txt中可以看到如下信息:

如果ANR在native层,那么堆栈中就不会有相关调用的路径,这种情况只能在native层添加更多的Log,一步步来查找了

NATIVE表示当前线程的状态:

** 特别说明一下MONITOR状态和SUSPEND状态,MONITOR状态一般是类的同步块或者同步方法造成的,SUSPENDED状态在debugger的时候会出现,可以用来区别是不是真的是用户正常操作跑出了ANR。

  • 通过Cmd line: packagename可以找到要分析的进程
  • 并不是trace文件包含的应用就一定是造成ANR的帮凶,应用出现在trace文件中,只能说明出现ANR的时候这个应用进程还活着,trace文件的顶部则是触发ANR的应用信息。因此,如果你的应用出现在了trace文件的顶部,那么很有可能是因为你的应用造成了ANR,否则是你的应用造成ANR的可能性不大,但是具体是不是还需要进一步分析

Original: https://www.cnblogs.com/endv/p/16360258.html
Author: Endv
Title: 导致ANR的几种情况

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551740/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 实用向—总结一些唯一ID生成方式

    Redis Incr 命令会将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 这里以jedis为例提供两种…

    技术杂谈 2023年7月25日
    069
  • 哪些纪录片可以称为「神作」?

    自然纪录片(这里面又大概分为地球、宇宙、人体三个大部分) 一、BBC地球篇首先是BBC三大”镇馆之宝”(自封的)《地球脉动》:几乎算是有史以来最好的生态纪录…

    技术杂谈 2023年5月31日
    079
  • 我的笔记本电脑瞬间扩大一个T的容量!

    前言 不知道有多少人在家里搭建中央存储设备的,也就是NAS。这个东西在我日常生活中,存储了大量的个人资料,家人们的照片,技术的资料,还有各种高清影视剧。搭配公网的IP,可以真正做到…

    技术杂谈 2023年7月11日
    0194
  • 一步一步写miscdevice的驱动模块

    (本文使用的平台为友善tiny210SDKv2) 对于linux的驱动程序来说,主要分为三种: miscdevice、platform_device、platform_driver…

    技术杂谈 2023年5月31日
    075
  • 设计模式 18 中介者模式

    中介者模式(Mediator Pattern)属于 行为型模式 一提到中介,大家都非常熟悉,生活中最常见的就是房屋中介。 虽然中介要收取一定费用,但却能给房东和租客都提供大量遍历,…

    技术杂谈 2023年7月25日
    077
  • elasticsearch

    一、什么是Elasticsearch? Lucene是一套用于 全文检索和 搜寻的 开源程序库,由Apache软件基金会支持和提供 Lucene提供了一个简单却强大的应用程序接口(…

    技术杂谈 2023年7月10日
    046
  • Illustrator 2023 for mac/win(ai2023)中文

    Original: https://www.cnblogs.com/aurora-123/p/16841728.htmlAuthor: 佛系女孩Title: Illustrator…

    技术杂谈 2023年7月11日
    065
  • 前后端分离,SpringBoot如何实现验证码操作

    验证码的功能是防止非法用户恶意去访问登录接口而设置的一个功能,今天我们就来看看在前后端分离的项目中,SpringBoot是如何提供服务的。 SpringBoot版本 本文基于的Sp…

    技术杂谈 2023年6月21日
    0109
  • 特定声音识别检测模块详解

    需求解析 对于养宠物的人来说,识别宠物的叫声并根据它的叫声来判断是否出现了异常。宠物叫声一般都比较单一,难度相对较低,准确性有保障。 病人健康检测:通过声音识别,可以检测出人夜晚打…

    技术杂谈 2023年5月31日
    093
  • Linux 程序后台运行 ☞ nohup

    nohup(no hang up),可以使程序在系统后台运行,即使退出终端也不受影响。 安装教程: CSDN: Linux 安装nohup 常见问题 执行jar包时: ignori…

    技术杂谈 2023年7月11日
    089
  • Centos7:maven打包构建项目失败,No compiler is provided in this environment.Perhaps。。。

    环境: Centos7 如果你输入 javac -version,没有显示版本信息,那么大概率解决方法是这个 yum install java-devel安装原生的: 再次运行 m…

    技术杂谈 2023年7月24日
    092
  • 【转】SVG动态图标是如何实现的

    这篇文章给大家分享的内容是SVG动态图标是如何实现的,有需要的朋友可以参考一下。 在 loading.io 上能看到好多效果惊艳的loading图标。它们都是用svg写成的,寥寥几…

    技术杂谈 2023年6月1日
    072
  • 星空

    大概是因为近视或者污染严重的缘故,我已经很少能看到星空了。更多时候抬起头,望见的只是无法穿透的黑夜。但星空就在那里,它不会因为我看不见它而消失。准确地说,星空一直在我们每个人的心里…

    技术杂谈 2023年6月21日
    082
  • Golang:将日志以Json格式输出到Kafka

    工程实践中,我们往往还需要对日志进行采集,将日志归集到一起,然后用于各种处理分析,比如生产环境上的错误分析、异常告警等等。在日志消息系统领域,Kafka久负盛名,这篇文章就以将日志…

    技术杂谈 2023年7月11日
    089
  • JS响应式修改基于vue实现的页面的input值

    大部分人在看到这篇文章的标题时第一时间可能有点懵,我先简单介绍一下背景: 公司有一个基于Vue实现的登录中心是我负责维护的,页面上是一个常规的登录界面,用户名输入框、密码输入框和登…

    技术杂谈 2023年5月30日
    078
  • SpringMVC的主要组件和工作流程

    Spring MVC的主要组件 (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServl…

    技术杂谈 2023年7月24日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球