Android性能分析和优化之traces.txt(ANR分析)

本文详细介绍了Android应用中的ANR(Application Not Responding)问题,包括KeyDispatchTimeout、BroadcastTimeout和ServiceTimeout三种类型。ANR发生的原因如UI线程阻塞、耗时操作未异步处理等,并提供了避免ANR的建议,如优化UI布局和使用Handler。文章还阐述了如何通过DDMS日志和traces.txt文件进行ANR分析,包括导出traces.txt的步骤以及如何解读文件内容。

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

  • ANR 类型分类。
    1、 KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应。按键或者触摸引起的ANR的时间定于是在AMS中 static final int KEY_DISPATCHING_TIMEOUT = 5*1000 设置的。
    2、 BroadcastTimeout(10 seconds) –BroadcastReceiver在特定时间内无法处理完成。
    3、 ServiceTimeout(20 seconds) –小概率类型 Service在特定的时间内无法处理完成。

  • 导致ANR的原因有以下几种:
    1、当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)。
    2、当前的事件正在处理,但没有及时完成。

  • 避免ANR的方式:
    1、UI线程尽量只做跟UI相关的工作。
    2、 耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理。
    3、 尽量用Handler来处理UIthread和别的thread之间的交互。

  • 优化UI的布局,可以采用Dump View Hierarchy,详见 https://blog.youkuaiyun.com/wangqiubo2010/article/details/79731317

  • ANR分析,可以通过android studio 的DDMS中的Log 或者 手机 /data/anr/..目录中的ANR文件 来对ANR进行分析。
    1、测试源码,按钮点击事件中,Thread.sl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值