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)
