You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Firebase中随机ANR(sun.misc.Unsafe.park)触发场景的技术咨询

ANR触发场景分析

上报的ANR栈日志

main (timed waiting):tid=1 systid=22386
   at sun.misc.Unsafe.park(Native method)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
   at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:88)
   at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
   at kotlinx.coroutines.BuildersKt.runBlocking(unavailable:1)
   at androidx.appcompat.app.AppCompatViewInflater.a(AppCompatViewInflater.java:20)
   at androidx.appcompat.widget.ActionBarBackgroundDrawable.c(ActionBarBackgroundDrawable.java:7)
   at androidx.core.app.ActivityRecreator$1.b(ActivityRecreator.java:4)
   at androidx.core.app.ActivityRecreator$1.<init>(ActivityRecreator.java:87)
   at com.example.sdk.MyService.initializeSdk(MyService.kt:13)
   at com.example.sdk.MyService.onStartCommand(MyService.kt:98)
   at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4784)
   at android.app.ActivityThread.access$2000(ActivityThread.java:301)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2204)
   at android.os.Handler.dispatchMessage(Handler.java:106)
   at android.os.Looper.loop(Looper.java:246)
   at android.app.ActivityThread.main(ActivityThread.java:8633)
   at java.lang.reflect.Method.invoke(Native method)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

问题描述

我在Firebase中观测到部分设备随机上报上述ANR日志,恳请协助分析该ANR可能的触发场景,感谢您的帮助!

可能的触发场景分析

  • 主线程阻塞核心原因:栈日志显示主线程通过runBlocking启动协程后进入timed waiting状态。runBlocking会阻塞当前线程(此处为主线程)等待协程完成,若协程内任务长时间占用资源或等待未就绪条件,会导致主线程无法响应系统事件,触发ANR。
  • SDK初始化的潜在风险:ANR触发点在MyService.initializeSdk(MyService.kt:13),说明SDK初始化逻辑被放在主线程的runBlocking中。如果初始化包含以下操作,极易引发ANR:
    • 同步网络请求:未采用异步方式,直接在协程内发起网络调用且未设置合理超时,网络状况差的设备上会长期阻塞主线程。
    • 磁盘IO操作:比如读写大文件、数据库同步查询,这类操作在IO性能差的设备上耗时可能超过系统ANR阈值(通常5秒)。
    • 锁或资源等待:初始化过程中尝试获取被其他线程长期占用的锁,或依赖未完成的异步任务结果,导致runBlocking持续等待。
  • 系统组件交互影响:栈中出现ActivityRecreator相关调用,说明初始化可能涉及Activity重建逻辑。部分设备系统对Activity状态恢复的处理存在差异,或应用后台运行时系统资源受限,导致ActivityRecreator操作无法及时完成,进而通过runBlocking阻塞主线程。
  • 设备性能差异导致随机性:ANR仅在部分设备出现,大概率是不同设备的CPU、内存、IO性能差异导致。中低端设备或后台运行大量应用的设备资源不足,原本在高端设备上快速完成的初始化任务,在这些设备上耗时超过ANR阈值。

内容的提问来源于stack exchange,提问作者Maradiya Krupa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:02:35