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

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组件的异步交互时序冲突导致,可通过以下步骤复现:

  1. 开启系统辅助功能(如TalkBack、第三方屏幕阅读器)
  2. 在低性能设备上,快速重复执行页面跳转操作(如列表项点击后立即返回,循环多次)
  3. 让辅助功能服务持续尝试获取页面组件的尺寸信息,加大时序冲突的触发概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:55:21