当前位置: 首页 > news >正文

使用trace文件分析ANR

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jiangguangchao/article/details/54908477

ANR定义与分类

ANR(Application Not Responding):应用程序无响应,是Android中AMS与WMS监测应用响应超时的表现;

我们应用开发中常见的ANR主要有如下几类:

  • 按键触摸事件派发超时ANR,一般阈值为5s(设置中开启ANR弹窗,默认有事件派发才会触发弹框ANR);
  • 广播阻塞ANR,一般阈值为10s(设置中开启ANR弹窗,默认不弹框,只有log提示);
  • 服务超时ANR,一般阈值为20s(设置中开启ANR弹窗,默认不弹框,只有log提示);



ANR的定位与分析

当ANR发生时除过logcat可以看见的log以外我们还可以在系统指定目录下找到traces文件进行分析,发生ANR后我们可以通过如下命令得到ANR trace文件:

adb pull /data/anr/traces.txt ./
  • 1

然后我们用txt编辑器打开,可以发现如下结构:

//显示进程id、ANR发生时间点、ANR发生进程包名
----- pid 19073 at 2015-10-08 17:24:38 -----
Cmd line: com.example.yanbo.myapplication
//一些GC等object信息,通常可以忽略
......
//ANR方法堆栈打印信息!重点!
DALVIK THREADS (18):
"main" prio=5 tid=1 Sleeping
  | group="main" sCount=1 dsCount=0 obj=0x7497dfb8 self=0x7f9d09a000
  | sysTid=19073 nice=0 cgrp=default sched=0/0 handle=0x7fa106c0a8
  | state=S schedstat=( 125271779 68162762 280 ) utm=11 stm=1 core=0 HZ=100
  | stack=0x7fe90d3000-0x7fe90d5000 stackSize=8MB
  | held mutexes=
  at java.lang.Thread.sleep!(Native method)
  - sleeping on <0x0a2ae345> (a java.lang.Object)
  at java.lang.Thread.sleep(Thread.java:1031)
  - locked <0x0a2ae345> (a java.lang.Object)
//真正导致ANR的问题点,可以发现是onClick中有sleep导致。我们平时可以类比分析即可,这里不详细说明。
  at java.lang.Thread.sleep(Thread.java:985)
  at com.example.yanbo.myapplication.MainActivity$1.onClick(MainActivity.java:21)
  at android.view.View.performClick(View.java:4908)
  at android.view.View$PerformClick.run(View.java:20389)
  at android.os.Handler.handleCallback(Handler.java:815)
  at android.os.Handler.dispatchMessage(Handler.java:104)
  at android.os.Looper.loop(Looper.java:194)
  at android.app.ActivityThread.main(ActivityThread.java:5743)
  at java.lang.reflect.Method.invoke!(Native method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:988)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
......
//省略一些不常关注堆栈打印
......

OK,ANR分析结束。

转载于:https://www.cnblogs.com/xgjblog/p/11464910.html

相关文章:

  • javacv获取视频第一帧
  • Android ANR log trace日志文件分析
  • ffmpeg开发文档
  • js 特殊字符替换成换行
  • xampp for mac配置局域网访问
  • Xray写POC插件
  • db timedb / ClickHouse
  • Redis 学习笔记(篇十):Sentinel
  • OS + Centos7.6 / Windows 10 shuangxitong
  • C#中字符串转换为计算公式
  • SSM框架-SpringMVC
  • SSM框架-mybatis
  • 微软3389远程漏洞CVE-2019-0708批量检测工具
  • 浅谈 赛马问题
  • JDK配置
  • 《Java编程思想》读书笔记-对象导论
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Centos6.8 使用rpm安装mysql5.7
  • co模块的前端实现
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java小白进阶笔记(3)-初级面向对象
  • linux学习笔记
  • WePY 在小程序性能调优上做出的探究
  • 浮现式设计
  • 排序算法学习笔记
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 通过git安装npm私有模块
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 仓管云——企业云erp功能有哪些?
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # 数据结构
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)常见O(n^2)排序算法解析
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (八)Spring源码解析:Spring MVC
  • (差分)胡桃爱原石
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (九十四)函数和二维数组
  • (十一)图像的罗伯特梯度锐化
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)fock函数详解
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .gitignore文件设置了忽略但不生效
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net FrameWork总结
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 使用ajax控件后如何调用前端脚本
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • :O)修改linux硬件时间
  • [100天算法】-x 的平方根(day 61)