一、ANR 介绍

ANR的全称是application not responding,意思就是程序未响应。

首先ANR的发生是有条件限制的,分为以下三点:

1.只有主线程才会产生ANR,主线程就是UI线程;

2.必须发生某些输入事件或特定操作,比如按键或触屏等输入事件,在BroadcastReceiver或Service的各个生命周期调用函数;

3.上述事件响应超时,不同的context规定的上限时间不同

a.主线程对输入事件5秒内没有处理完毕

b.主线程在执行BroadcastReceiver的onReceive()函数时10秒内没有处理完毕

c.主线程在Service的各个生命周期函数时20秒内没有处理完毕。

二、拉取trace.txt文件

如何找到anr的原因? 系统在发生anr时,会记录一个日志文件,也就是trace文件,这个文件里会记录 主线程中 哪个方法 执行 导致anr。   所以我们要拿到这个trace文件进行分析。 不同的手机trace文件的位置、命名管理方式可能略有差异。

方法一:adb pull /data/anr/traces.txt

这是早期的安卓系统 拉取trace 文件 的命令。这个命令在很机型上不能正常使用了,原因是各个厂商自行修改了trace文件的命名和管理方式。

方法二: 通过adb shell 进入到 “/data/anr/” 目录下,查看一下当前手机的命名管理方式。

adb shell :进入 shell命令模式

cd data :进入 data目录

cd anr:进入anr目录

ls -a :显示当前目录(即anr目录)下的所有文件

下图是我在小米5s plus 上运行的截图,我们可以发现 小米手机 是根据 应用的包名 和 anr发生的日期、时间 来命名的。  早期的trace.txt是将所有app的anr全都记录一个文件里,这样查找起来非常麻烦。  小米这项改进还是很有作用的。

方法三:如果拉取时碰到权限问题,可以使用“adb bugreport”命令。   会在adb命令所处的目录下生成一个  zip 文件。 解压缩后,在“FS/data/anr” 目录下能看到 anr 文件,不过它没有后缀我,直接用文本软件打开即可。

三、trace文件的分析:引起ANR问题的根本原因,总的来说可以归纳为两类:

1.应用进程自身引起的,例如:
    主线程阻塞、挂起、死循环
    应用进程的其他线程的CPU占用率高,使得主线程无法抢占到CPU时间片
2.其他进程间接引起的,例如:
    当前应用进程进行进程间通信请求其他进程,其他进程的操作长时间没有反馈
    其他进程的CPU占用率高,使得当前应用进程无法抢占到CPU时间片

拿到trace文件后,直接根据自己应用的包名搜索关键信息,  在 main 线程中 调用  drawPolyline 时 发生 anr,大致可以猜测这个方法里 执行了 耗时操作, 而且消耗的时间达到5秒。

trace文件的具体分析,我这篇列举的不是很详细,请参考下面这篇博客,详细列举了几种常见的 anr 原因

博客链接:android 性能优化(五)ANR 秒变大神

拉取 trace.txt 进行 anr 分析相关推荐

  1. android 拉取traces.txt分析ANR

    什么是ANR ANR即Application Not Responding的缩写,就是应用无响应 首先ANR的发生是有条件限制的,分为以下三点: 1.只有主线程才会产生ANR,主线程就是UI线程: 2 ...

  2. 性能优化-Android之ANR分析解决 traces.txt文件分析 CPU占用过高 解决ANR文件没有导出权限问题

    (由于公司项目特殊情况,需要使用一些小厂的三防功能手机,不能使用我们平时用的这些民用手机) 前期测试的时候是用民用手机测试的,有六七种机型(小米,华为,中兴,oppo),使用过程中均没有出现ANR的情 ...

  3. 性能优化-Android之ANR分析解决 traces.txt文件分析

    (由于公司项目特殊情况,需要使用一些小厂的三防功能手机,不能使用我们平时用的这些民用手机) 前期测试的时候是用民用手机测试的,有六七种机型(小米,华为,中兴,oppo),使用过程中均没有出现ANR的情 ...

  4. 从源码分析RocketMQ系列-消息拉取PullMessageProcessor详解

    导语   在之前的分析中分析了关于SendMessageProcessor,并且提供了对应的源码分析分析对于消息持久化的问题,下面来看另外一个PullMessageProcessor,在RocketM ...

  5. Consumer消息拉取和消费流程分析

    1. 前言 MQConsumer是RocketMQ提供的消费者接口,从接口定义上可以看到,它主要的功能是订阅感兴趣的Topic.注册消息监听器.启动生产者开始消费消息. ​ 消费者获取消息的模式有两种 ...

  6. 人脸识别/车牌识别系统视频智能分析平台EasyCVR如何配置在按需模式下只拉取子码流?

    一般高清摄像头产品编码器可同时产生两个不同的编码格式,统称主码流和子码流,双码流技术兼顾了高质量图像传输和窄带宽传输(监控视频中的主码流和子码流是什么意思). TSINGSEE青犀视频云边端架构视频平 ...

  7. Android ANR分析(trace文件的产生流程)

    ANR信息获取(trace文件的产生流程) 首先收集需要dump trace的进程并给对应进程发送dump trace的信号 接着分析最后一步向收集到的进程发送信号 首先收集需要dump trace的 ...

  8. 普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式...

    前言 本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台. 本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念 ...

  9. 【四】【vlc-android】播放控制交互与demux解复用层、媒体数据流拉取层的具体数据传递和控制流程源码分析

    1.VLC中有很多demux/mux/encoder/decoder模块,因此需要先了解这些模块的加载原理,模块的加载原理基本一致,因此举例分析MP4解复用模块如何加载完成的,主要流程如下: // v ...

最新文章

  1. 毕业典礼上,硕士情侣现场求婚!校长也被甜到全程“姨母笑”
  2. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )
  3. 成都python培训比较好的机构-成都Python培训班哪个好,怎样才能不走弯路学习
  4. Tomcat 最新版安装与使用手册,tomcat更改端口号方法,tomcat控制台乱码问题解决方法
  5. 全网最深刻的理解音频转码swr_convert(2019/10/29已补充修正)
  6. java登录界面命令_Java命令行界面(第29部分):自己动手
  7. 如何获取ubuntu源码包里面的源码进行编译
  8. RocketMQ源码解析-PushConsumer(2)
  9. chrome插件 实现微博言论监控
  10. CSDN 2020博客之星投票进行中:送你喜爱的博主C位出道!
  11. 图像仿射变换之图像旋转 python
  12. python与mongodb更新_Python对MongoDB增删改查
  13. 一文读完C语言基础语法
  14. 车载T- BOX全国产化电子元件推荐方案
  15. mac原生壁纸,拿走不谢!
  16. linux系统bcast,Linux系统下取IP地址的几种方法
  17. mysql 高并发扣除库存_【并发】mysql处理高并发,防止库存超卖
  18. 数据中台建设的价值及数据中台架构
  19. Android性能优化实践
  20. markdown语法教学(for萌新版)

热门文章

  1. 多表(三个表)插入与删除操作
  2. 载波聚合mac_Lte-a终端测试仪表在载波聚合下mac层数据调度方法
  3. 2. 硬件基础知识学习
  4. WiFi基本概念(十三)射频(一)(EVM)
  5. win32-防火墙-禁用软件联网-详细教程
  6. matlab 局部极值点,matlab 图像局部求极值
  7. ZYNQ 常见问题解决方法
  8. C++ 制作简易音乐播放器
  9. jdk14下载与安装教程(win10)超详细
  10. AutoLayout2