Android 7及以下系统Jetpack Compose无障碍事件池崩溃排查求助
Android 7及以下设备Compose项目崩溃(AccessibilityEvent重复回收)排查提示
Firebase显示Android 7及以下版本设备出现如下崩溃,项目几乎完全基于Jetpack Compose开发,仅包含少量AndroidView组件,目前无法定位问题根源,求排查方向:
Fatal Exception: java.lang.IllegalStateException: Already in the pool! at android.util.Pools$SimplePool.release(Pools.java:112) at android.util.Pools$SynchronizedPool.release(Pools.java:161) at android.view.accessibility.AccessibilityEvent.recycle(AccessibilityEvent.java:1044) at android.view.accessibility.AccessibilityManager.sendAccessibilityEvent(AccessibilityManager.java:332) at android.view.ViewRootImpl.requestSendAccessibilityEvent(ViewRootImpl.java:7122) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:906) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sendEvent(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1169) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sendSemanticsPropertyChangeEvents$ui_release(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2123) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.checkForSemanticsChanges(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1888) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.semanticsChangeChecker$lambda$32(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1764) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.$r8$lambda$XMXpDxOWXXw8oFvZkg91zLjynx0(AndroidComposeViewAccessibilityDelegateCompat.android.kt) at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2.run(D8$$SyntheticClass) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5692) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
排查提示
- 升级Compose UI版本:该崩溃是Compose早期版本在旧Android系统上的无障碍事件重复回收bug,优先检查
compose-ui版本是否低于1.4.0,升级到1.4.0及以上稳定版,官方已在后续版本修复该类问题。 - 检查AndroidView的无障碍逻辑:项目中的少量AndroidView可能是触发点,确认这些原生View是否手动调用了
AccessibilityEvent.recycle(),原生View的无障碍处理和Compose的无障碍代理可能冲突,导致事件被重复回收。 - 临时屏蔽语义属性测试:如果升级版本后问题仍存在,可在疑似崩溃的页面/组件中用
Modifier.semantics { clearAndSetSemantics { } }清除语义属性,排查是否是特定语义触发了重复事件。 - 测试第三方无障碍服务:Android 7及以下设备上,第三方无障碍服务(如屏幕阅读器、悬浮工具类应用)可能干扰系统事件池,关闭所有第三方无障碍服务后测试是否还会崩溃。
- 复现崩溃场景:在Android 7模拟器开启无障碍调试,操作混合了Compose和AndroidView的界面,结合Logcat查看无障碍事件的发送/回收日志,定位具体触发崩溃的UI操作。
内容的提问来源于stack exchange,提问作者Bakhtiyor Begmatov
相关产品推荐
相关产品推荐

