Android 13设备高ANR率问题排查求助
针对Android 13设备高ANR率的排查建议

我的Android应用遇到严重问题:仅在Android 13设备上出现高ANR(Application Not Responding)率。尽管尝试了各种方法,仍无法稳定复现该ANR或确定其根本原因。
以下是从Firebase Crashlytics获取的堆栈跟踪:
main (native):tid=1 systid=13180 #00 pc 0x501b0 libc.so (syscall + 32) (BuildId: 8cdfaa872c9e7191f6ce7a82d62dbc4b) #01 pc 0x54e7c libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*) + 148) (BuildId: 8cdfaa872c9e7191f6ce7a82d62dbc4b) #02 pc 0xbb2bc libc.so (pthread_cond_wait + 80) (BuildId: 8cdfaa872c9e7191f6ce7a82d62dbc4b) #03 pc 0x284f3c libhwui.so (android::uirenderer::renderthread::DrawFrameTask::drawFrame() + 360) (BuildId: 56d31f3aab59c6c0ed6699bc4a8c8848) at android.graphics.HardwareRenderer.nSyncAndDrawFrame(Native method) at android.graphics.HardwareRenderer.syncAndDrawFrame(HardwareRenderer.java:457) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:866) at android.view.ViewRootImpl.draw(ViewRootImpl.java:5120) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4819) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4014) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2606) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9773) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1480) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1488) at android.view.Choreographer.doCallbacks(Choreographer.java:1111) at android.view.Choreographer.doFrame(Choreographer.java:1016) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1463) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:223) at android.os.Looper.loop(Looper.java:324) at android.app.ActivityThread.main(ActivityThread.java:8631) at java.lang.reflect.Method.invoke(Native method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1061)
我已优化代码、更新项目所有依赖并将AGP升级至v7.4.2,但问题仍未解决,恳请技术支持。
排查方向与解决方案
- 聚焦UI渲染线程阻塞:从堆栈看,ANR发生在渲染线程的
DrawFrameTask::drawFrame()阶段,属于UI渲染流程阻塞:- 检查主线程是否存在耗时操作(如IO读写、复杂数据计算),尤其是在
onDraw、onMeasure或视图遍历的回调中 - 排查自定义View的绘制逻辑,是否存在频繁创建对象、过度绘制、无效重绘等低效操作
- 检查主线程是否存在耗时操作(如IO读写、复杂数据计算),尤其是在
- Android 13特有适配检查:
- 确认是否在主线程执行Android 13新增的权限请求(如通知权限、媒体权限),这类操作可能触发线程阻塞
- 验证
ViewRootImpl相关回调的线程安全性,Android 13对视图系统的线程调度逻辑有微调,需避免跨线程操作视图
- 系统工具定位问题:
- 使用
adb shell dumpsys anr抓取实时ANR日志,获取更完整的线程阻塞上下文信息 - 用Android Studio Profiler录制主线程CPU轨迹,重点分析渲染阶段的耗时函数调用链
- 启用Firebase Performance Monitoring,追踪UI渲染的帧耗时数据,定位卡顿高发的场景
- 使用
- 依赖库兼容性验证:
- 即使升级了AGP,仍需确认第三方UI库(如RecyclerView、自定义控件库)是否适配Android 13,旧版本库可能存在渲染阻塞问题
- 部分Android 13设备的厂商定制系统可能存在
libhwui.so兼容性bug,可尝试在不同品牌的Android 13设备上复现问题,缩小范围
内容的提问来源于stack exchange,提问作者Govind Jha
相关产品推荐
相关产品推荐

