Jetpack Compose AccessibilityInteractionController空指针崩溃排查求助
问题描述
应用发布至Google Play后,Crashlytics中出现大量致命空指针异常,堆栈跟踪如下:
异常堆栈1
Fatal Exception: java.lang.NullPointerException at androidx.compose.ui.node.DelegatableNodeKt.requireCoordinator-64DMado(DelegatableNodeKt.java:295) at androidx.compose.ui.semantics.SemanticsNode.findCoordinatorToGetBounds$ui_release(SemanticsNode.kt:356) at androidx.compose.ui.semantics.SemanticsNode.getSize-YbymL2g(SemanticsNode.java:115) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.performActionHelper(AndroidComposeViewAccessibilityDelegateCompat.java:1358) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$performActionHelper(AndroidComposeViewAccessibilityDelegateCompat.java:117) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.performAction(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2451) at android.view.AccessibilityInteractionController.performAccessibilityActionUiThread(AccessibilityInteractionController.java:612) at android.view.AccessibilityInteractionController.-wrap6(AccessibilityInteractionController.java) at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1228) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6942) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
异常堆栈2
Fatal Exception: java.lang.NullPointerException at androidx.compose.ui.node.DelegatableNodeKt.requireCoordinator-64DMado(DelegatableNodeKt.java:295) at androidx.compose.ui.semantics.SemanticsNode.findCoordinatorToGetBounds$ui_release(SemanticsNode.kt:356) at androidx.compose.ui.semantics.SemanticsNode.getSize-YbymL2g(SemanticsNode.java:115) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.performActionHelper(AndroidComposeViewAccessibilityDelegateCompat.java:1358) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$performActionHelper(AndroidComposeViewAccessibilityDelegateCompat.java:117) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.performAction(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2451) at android.view.AccessibilityInteractionController.performAccessibilityActionUiThread(AccessibilityInteractionController.java:708) at android.view.AccessibilityInteractionController.access$500(AccessibilityInteractionController.java:67) at android.view.AccessibilityInteractionController$PrivateHandler.handleMessage(AccessibilityInteractionController.java:1327) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6704) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:916)
- 堆栈无应用自身代码,无法通过try/catch捕获异常
- 无法复现该问题
- 应用基于Compose v1.3构建,1.3-beta版本同样存在此问题
- 需求:提供修复或复现方案
修复与复现方案
一、修复方案
1. 升级Compose版本
该空指针问题属于Compose UI库内部bug,官方已在Compose 1.4.0及以上稳定版本中修复。直接升级到1.4.x或更高版本(如1.5.x)可彻底解决此问题。
2. 临时规避方案(无法升级时)
如果暂时无法升级Compose版本,可通过以下方式降低异常触发概率:
- 确保所有Compose组件的语义配置(
semantics)逻辑正确,避免组件销毁后仍有辅助功能事件触发 - 在Activity/Fragment的
onDestroy生命周期中,手动清理ComposeView的辅助功能委托:override fun onDestroy() { super.onDestroy() composeView.accessibilityDelegate = null } - 优化页面切换、弹窗显示/隐藏等操作的时序,避免组件快速销毁时触发辅助功能操作
二、复现方案
该问题由辅助功能服务与Compose组件的异步交互时序冲突导致,可通过以下步骤复现:
- 开启系统辅助功能(如TalkBack、第三方屏幕阅读器)
- 在低性能设备上,快速重复执行页面跳转操作(如列表项点击后立即返回,循环多次)
- 让辅助功能服务持续尝试获取页面组件的尺寸信息,加大时序冲突的触发概率
内容的提问来源于stack exchange,提问作者user17952421
相关产品推荐
相关产品推荐

