拉取 trace.txt 进行 anr 分析

一、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 秒变大神

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你使用命令行进行git clone时,只拉取了.git文件的原因可能是因为你没有正确指定分支。默认情况下,git clone会拉取仓库的默认分支(通常是main分支),而你的项目实际上在master分支上。因此,你需要在git clone命令中添加分支选项来指定要克隆的分支。如果你使用的是乌龟克隆(TortoiseGit),你可以在克隆时在分支选项中选择master分支。如果你使用命令行进行克隆,你可以使用以下命令,并在命令中添加分支选项来指定master分支:git clone -b master [repository URL]。另外,如果你想将默认分支更改为master,你可以在git仓库的设置中进行修改。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [gitclone使用操作命令关联git,拉取上传更新操作](https://download.csdn.net/download/qq_38365046/13071384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [学习记录396@git clone 只克隆到.git文件](https://blog.csdn.net/weixin_44663675/article/details/113872780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值