Android ANR原因分析(基于traces.txt文件),

本文探讨了一个商业项目中遇到的Android通话功能卡顿问题,详细分析了ANR(应用程序无响应)现象,包括其触发条件、原因及避免策略。通过解读traces.txt文件,定位到具体包名和类的问题所在,提出了UI线程优化、耗时任务分离和Handler使用等解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,项目背景,

       商业项目,用于商铺柜台接单的,需要使用Android的通话功能。在响铃瞬间,界面出现卡顿,接着导致整个相关联的通话软件卡段(包括系统通话软件)

二,导出traces.txt文件


   adb shell pull /data/data/anr/traces.txt  c:\traces.txt

 

三,分析文件
    

     关键字 Cmd line,找到进程名称,
               "main" prio=5 tid=1 Native  
    看到自己的包名就知道是从哪个包名哪个类出问题了。

      一,导致ANR有以下几个方面

            1,按键或触摸事件在特定时间内无响应

            2,BroadcastReceiver在特定时间内(10秒)无法处理完成

            3,Service在特定的时间内无法处理完成,具体的超时时间的定义在framework下的ActivityManagerService.java

    二:为什么会超时呢?

        超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:

       1,当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)

       2,当前的事件正在处理,但没有及时完成

       3,机器的cpu处理能力不够,不足以响应复杂的数据处理

  三:如何避免KeyDispatchTimeout

      1,UI线程尽量只做跟UI相关的工作

     2,耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理

    3,尽量用Handler来处理UIthread和别的thread之间的交互

 

 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值