博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遇到ANR问题的处理步骤
阅读量:6209 次
发布时间:2019-06-21

本文共 2151 字,大约阅读时间需要 7 分钟。

遇到ANR问题的处理步骤

问题描述

开发中难免会遇到ANR的问题,遇到ANR问题不要想着是因为设备的卡顿出现的问题,我们无法解决,我们应先找到导致ANR的原因,分析原因之后,再来判断这个问题可不可以解决。

找出原因的方法

第一步:查看log日志文件
先查看日志文件,在文件中搜索ANR字符,找到下面这句话

ANR in com.dream.ebag.recitetext (com.dream.ebag.recitetext/.activity.MainActivity)

看后面的包名,如果包名你应用的,那么说明导致ANR的原因是在你自己的代码里,所以需要着手去处理它。
在日志中,我们还会发现下面这一句

Wrote stack traces to '/data/anr/traces.txt'

将ANR的问题写入了trances.txt文件中,接着我们就去获取trances.txt文件。
第二步:获取/data/src/traces.txt文件
使用adb命令来获取traces.txt文件。
命令步骤如下:

  • adb shell
    进入手机
  • cd data/anr
    进入anr文件夹
  • ll
    查看所有的anr文件
  • adb shell (Ctrl + D)
    退出手机
  • adb pull /data/anr/traces.txt
    导出trances文件。其中trances.txt是你想要导出的trances文件的名称。

完成之后就可以在C:\User\用户名 目录下找到导出的文件。

第三步:分析traces.txt文件

打开trances.txt文件。从前往后看,查看到如下内容:

DALVIK THREADS (25):"main" prio=5 tid=1 Suspended  | group="main" sCount=1 dsCount=0 obj=0x73edeee8 self=0xaad7ef50  | sysTid=12250 nice=0 cgrp=default sched=0/0 handle=0xf7291bec  | state=S schedstat=( 16245919762 711523055 2436 ) utm=1607 stm=17 core=0 HZ=100  | stack=0xff1d3000-0xff1d5000 stackSize=8MB  | held mutexes=  at java.lang.Character.isDigit(Character.java:2658)  ======================================查看重点===========================================  at com.dream.ebag.recitetext.utils.StringUtils.getSpell(StringUtils.java:270)  at com.dream.ebag.recitetext.utils.HanziUtils.LD(HanziUtils.java:100)  at com.dream.ebag.recitetext.fragment.TryReciteFragment.onResults(TryReciteFragment.java:885)  ======================================查看重点===========================================  at android.speech.SpeechRecognizer$InternalListener$1.handleMessage(SpeechRecognizer.java:456)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  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:902)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

可以找到导致ANR是在自己应用的哪个类,哪行代码。

解决问题

这个步骤就只能具体问题具体分析了,去自己的代码里找到trances.txt文件中指向的那一行,分析问题之后,使用合适的方法解决。

转载于:https://www.cnblogs.com/zhangmiao14/p/8693956.html

你可能感兴趣的文章
Linux调试工具lsof的深入分析
查看>>
damicms
查看>>
VEEAM replication配置步骤
查看>>
关于Oracle——导入dmp文件
查看>>
Node.js(一)——NodeJs基础
查看>>
多线程-线程安全问题
查看>>
systemd.unit翻译
查看>>
python模块:doctest,unitest模块
查看>>
我的友情链接
查看>>
简单linux内核的移植实现ftp服务
查看>>
Linux查看机器CPU温度
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Important virtual and physical switch parameters
查看>>
网格部件设置列高,设置高度效果
查看>>
golang修仙记之gorm(一)
查看>>
Web API 开启Session支持
查看>>
MySql按天,日,小时,分钟分组数据
查看>>
添加符号链接,方便管理
查看>>