Android SDK Survey Crash - Unable to destroy activity {io.intercom.android.sdk.survey.ui.IntercomSurveyActivity} | Community
Skip to main content
Question

Android SDK Survey Crash - Unable to destroy activity {io.intercom.android.sdk.survey.ui.IntercomSurveyActivity}

  • January 12, 2026
  • 1 reply
  • 57 views

Hello, I’ve got a crash using the Android SDK but can’t say more than the device details and the stacktrace, which I report here.

Hope you know more and got to fix it.

Intercom Android SDK: v17.3.0

Device: Samsung Galaxy A13 - Android 14

Fatal Exception: java.lang.RuntimeException: Unable to destroy activity {myapppackagename/io.intercom.android.sdk.survey.ui.IntercomSurveyActivity}: java.lang.IllegalArgumentException: Detected multithreaded access to SnapshotStateObserver: previousThreadId=1163), currentThread={id=2, name=main}. Note that observation on multiple threads in layout/draw is not supported. Make sure your measure/layout/draw for each Owner (AndroidComposeView) is executed on the same thread.
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6149)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:6181)
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8919)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

Caused by java.lang.IllegalArgumentException: Detected multithreaded access to SnapshotStateObserver: previousThreadId=1163), currentThread={id=2, name=main}. Note that observation on multiple threads in layout/draw is not supported. Make sure your measure/layout/draw for each Owner (AndroidComposeView) is executed on the same thread.
at androidx.compose.runtime.PreconditionsKt.throwIllegalArgumentException(Preconditions.kt:26)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:649)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:124)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeSemanticsReads$ui_release(OwnerSnapshotObserver.kt:112)
at androidx.compose.ui.node.LayoutNode.calculateSemanticsConfiguration(LayoutNode.kt:480)
at androidx.compose.ui.node.LayoutNode.invalidateSemantics$ui_release(LayoutNode.kt:445)
at androidx.compose.ui.node.SemanticsModifierNodeKt.invalidateSemantics(SemanticsModifierNode.kt:116)
at androidx.compose.foundation.FocusableNode.onFocusStateChange(FocusableNode.java:228)
at androidx.compose.foundation.FocusableNode.access$onFocusStateChange(FocusableNode.java:146)
at androidx.compose.foundation.FocusableNode$focusTargetNode$1.invoke(FocusableNode.java:172)
at androidx.compose.foundation.FocusableNode$focusTargetNode$1.invoke(FocusableNode.java:172)
at androidx.compose.ui.focus.FocusTargetNode.dispatchFocusCallbacks$ui_release(FocusTargetNode.kt:276)
at androidx.compose.ui.focus.FocusOwnerImpl.clearFocus(FocusOwnerImpl.kt:197)
at androidx.compose.ui.focus.FocusOwnerImpl.clearFocus-I7lrPNg(FocusOwnerImpl.kt:180)
at androidx.compose.ui.focus.FocusTargetNode.onDetach(FocusTargetNode.kt:155)
at androidx.compose.ui.Modifier$Node.runDetachLifecycle$ui_release(Modifier.kt:281)
at androidx.compose.ui.node.DelegatingNode.runDetachLifecycle$ui_release(DelegatingNode.kt:266)
at androidx.compose.ui.node.NodeChain.runDetachLifecycle$ui_release(NodeChain.java:350)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:599)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:600)
at androidx.compose.ui.node.LayoutNode.onChildRemoved(LayoutNode.kt:367)
at androidx.compose.ui.node.LayoutNode.removeAll$ui_release(LayoutNode.kt:353)
at androidx.compose.ui.node.UiApplier.onClear(UiApplier.android.kt:41)
at androidx.compose.runtime.AbstractApplier.clear(AbstractApplier.java:216)
at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:880)
at androidx.compose.ui.platform.WrappedComposition.dispose(Wrapper.android.kt:154)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:165)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.jvm.kt:313)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.jvm.kt:266)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.jvm.kt:284)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.jvm.kt:135)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.jvm.kt:119)
at androidx.lifecycle.ReportFragment$Companion.dispatch$lifecycle_runtime_release(ReportFragment.android.kt:181)
at androidx.lifecycle.ReportFragment$LifecycleCallbacks.onActivityPreDestroyed(ReportFragment.android.kt:137)
at android.app.Activity.dispatchActivityPreDestroyed(Activity.java:1642)
at android.app.Activity.performDestroy(Activity.java:9269)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1491)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:6136)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:6181)
at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:47)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:180)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8919)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

 

1 reply

Forum|alt.badge.img
  • Intercom Team
  • January 30, 2026

Hey ​@epapa, thanks for the stacktrace. From what I can see the app is crashing when closing the Intercom survey screen. The crash is due to a threading rule in the UI framework. I see you are using an older version of the Android SDK, please update to the latest version (17.4.2) and see if the issue persists.

If it does let me know and I’ll be happy to escalate this to our product team.