[Android Framework] 系统 ANR (死机冻屏)问题排查实践小结

本文详细介绍了Android系统中的ANR(Application Not Responding)问题,包括卡顿的定义、分类和原因,重点分析了ANR的出现原理、应用层和系统层可能导致ANR的因素。通过日志抓取、traces.txt分析和Systrace工具,展示了问题排查和解决的全过程,最终找到UnityMain线程优先级过高导致的系统卡死问题,并提出了解决方案。

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

背景

本文记录了工作中遇到的Andorid 系统层级 ANR 的问题排查及解决思路。

具体问题:在 VR一体机设备中遇到了第三方应用在视频播放时 当高标清切换时 出现了【死机冻屏】 的问题。

我们首先了解一下卡顿的定义与分类。

卡顿的定义:

FPS:Frame Per Second, 即每秒显示的帧数。

目前手机默认的 FPS 为 60, 也就是屏幕的刷新率是 60 HZ.即每秒传输 60帧, 则 1000/60 ms= 16.7ms 刷新一次屏幕。 FPS 通常是一个波动的值。

FPS 是我们分析程序是否出现了卡顿的指标。

如手机的刷新率是 60 HZ,如果由于某种原因卡顿导致 FPS = 50, 即 1 秒 内连续丢失 10帧,用户的直观感觉就是卡了一下。

卡顿分类:

  • 微卡顿

    如果两帧 之间介于 100 ~ 200ms 之间,这种卡顿不容易察觉,如列表的滑动场景。

  • 卡顿

    如果两帧之间超过 200 ms,但是低于 5s,则是比较严重的卡顿。需要进行专项改进。

  • ANR

    程序无响应。这是 google 给出的标准&#x

### Android 开发中 ANR 分析与解决方案 #### 获取 `trace.txt` 文件 当应用程序未响应 (ANR) 发生时,Android 系统会在 `/data/anr/` 路径下生成名为 `traces.txt` 的日志文件。此文件包含了所有线程的堆栈信息,尤其是主线程的状态,有助于定位导致 ANR 的根本原因[^2]。 为了从设备中提取该文件,可以使用 ADB 命令: ```bash adb pull /data/anr/traces.txt ``` 此外,在每次发生 ANR 事件时,Logcat 日志也会记录 `trace.txt` 文件的具体路径。某些集成开发环境(IDE),如 Android Studio,允许开发者在程序运行期间直接查看这些 ANR 信息。 #### 分析 `trace.txt` 结构 `trace.txt` 文件通常由多个部分组成,每一部分对应一个进程内的不同线程状态。对于每个线程而言,文件会显示其名称、优先级以及当前正在执行的方法调用链路。特别需要注意的是 "main" 或者 "UI thread" 下的内容,因为大多数情况下,ANR 是由于长时间阻塞 UI 线程而引起的。 #### 使用 StrictMode 进行预防性检测 为了避免潜在的应用无响应情况,建议在开发过程中利用 Android SDK 提供的 `StrictMode` 工具类来进行监控。通过配置合适的策略选项,能够及时捕获那些可能引发 ANR 的行为模式,比如在网络请求或磁盘读写操作发生在主线程上的情形。这使得开发者能够在早期阶段识别并修正此类问题[^3]。 #### 处理已发生的 ANR 错误 一旦确认了造成 ANR 的具体位置,则应采取措施优化相应代码逻辑,确保任何耗时任务都不会影响到用户体验流畅度。常见的改进方法包括但不限于: - 将耗时较长的任务移至后台工作队列; - 减少不必要的资源加载次数; - 对频繁访问的数据源实施缓存机制; - 合理规划异步回调函数的设计思路; 综上所述,通过对 `trace.txt` 文件的有效解读和借助像 `StrictMode` 这样的辅助工具,可以帮助我们更好地理解和应对 Android 应用中存在的 ANR 挑战[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊子说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值